您的位置:首页 > 移动开发 > Android开发

Android常用代码段

2015-06-09 10:04 495 查看

1、LogUtil.java

public class LogUtil {
private static final boolean isVerbose = true;
private static final boolean isDebug = true;
private static final boolean isInformation = true;
private static final boolean isWarning = true;
private static final boolean isError = true;

public static void v(String tag, String msg) {
if (isVerbose) {
android.util.Log.v(tag, msg);
}
}

public static void v(String tag, String msg, Throwable t) {
if (isVerbose) {
android.util.Log.v(tag, msg, t);
}
}

public static void d(String tag, String msg) {
if (isDebug) {
android.util.Log.d(tag, msg);
}
}

public static void d(String tag, String msg, Throwable t) {
if (isDebug) {
android.util.Log.d(tag, msg, t);
}
}

public static void i(String tag, String msg) {
if (isInformation) {
android.util.Log.i(tag, msg);
}
}

public static void i(String tag, String msg, Throwable t) {
if (isInformation) {
android.util.Log.i(tag, msg, t);
}
}

public static void w(String tag, String msg) {
if (isWarning) {
android.util.Log.w(tag, msg);
}
}

public static void w(String tag, String msg, Throwable t) {
if (isWarning) {
android.util.Log.w(tag, msg, t);
}
}

public static void e(String tag, String msg) {
if (isError) {
android.util.Log.e(tag, msg);
}
}

public static void e(String tag, String msg, Throwable t) {
if (isError) {
android.util.Log.e(tag, msg, t);
}
}
}


2、获取网络状态

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State;
/**
* <pre>
* 获取网络状态工具类
* NETWORN_NONE = 没有网络连接
* NETWORN_WIFI = wifi连接
* NETWORN_MOBILE = 2g/3g/4g网连接
* </pre>
*/
public class NetworkStateUtils {
public static final int NETWORN_NONE = 0;
public static final int NETWORN_WIFI = 1;
public static final int NETWORN_MOBILE = 2;

public static int getNetworkState(Context context){
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

//Wifi
State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
if(state == State.CONNECTED||state == State.CONNECTING){
return NETWORN_WIFI;
}

//3G
state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
if(state == State.CONNECTED||state == State.CONNECTING){
return NETWORN_MOBILE;
}
return NETWORN_NONE;
}
}


3、Popwindow点击外部消失

from:http://www.eoeandroid.com/thread-98703-1-1.html
首先要给popwindow设置背景图片为透明,然后让它点击外面触发这个事件为true
mPopupWindow.setBackgroundDrawable(getDrawable());
mPopupWindow.setOutsideTouchable(true);

/**
* 生成一个 透明的背景图片
* @return
*/
private Drawable getDrawable(){
ShapeDrawable bgdrawable =new ShapeDrawable(new OvalShape());
bgdrawable.getPaint().setColor(cxt.getResources().getColor(android.R.color.transparent));
return bgdrawable;
}

这样点击popwindow之外的话就会让它消失,测试已通过。


4、byte数组和16进制字符串转换

public static final String byteArray2HexString(byte[] byteArray) {
StringBuilder builder = new StringBuilder();
for (int i = 0, len = byteArray.length; i < len; i++) {
builder.append(String.format("%02X", byteArray[i]));
}
return builder.toString();
}

public static final byte[] hexString2ByteArray(String hexString) {
int strLength = hexString.length();
byte[] result = new byte[strLength / 2];
for (int i = 0, len = strLength / 2; i < len; i++) {
result[i] = (byte) Integer.parseInt(hexString.substring(i * 2, i * 2 + 2), 16);
}
return result;
}


5、获取当前apk的签名文件md5值

public static String getApkSignMD5(Context context) throws Exception {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(
context.getPackageName(), PackageManager.GET_SIGNATURES);
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(packageInfo.signatures[0].toByteArray());
return byteArray2HexString(md5.digest());
}

public static String byteArray2HexString(byte[] byteArray) {
StringBuilder builder = new StringBuilder();
for (int i = 0, len = byteArray.length; i < len; i++) {
builder.append(String.format("%02X", byteArray[i]));
}
return builder.toString();
}


6、获取任意apk文件的签名信息

//from:http://www.cnblogs.com/tt_mc/archive/2012/05/16/2503583.html
private String showUninstallAPKSignatures(String apkPath) {
String PATH_PackageParser = "android.content.pm.PackageParser";
try {
// apk包的文件路径
// 这是一个Package 解释器, 是隐藏的
// 构造函数的参数只有一个, apk文件的路径
// PackageParser packageParser = new PackageParser(apkPath);
Class pkgParserCls = Class.forName(PATH_PackageParser);
Class[] typeArgs = new Class[1];
typeArgs[0] = String.class;
Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);
Object[] valueArgs = new Object[1];
valueArgs[0] = apkPath;
Object pkgParser = pkgParserCt.newInstance(valueArgs);
MediaApplication.logD(DownloadApk.class, "pkgParser:" + pkgParser.toString());
// 这个是与显示有关的, 里面涉及到一些像素显示等等, 我们使用默认的情况
DisplayMetrics metrics = new DisplayMetrics();
metrics.setToDefaults();
// PackageParser.Package mPkgInfo = packageParser.parsePackage(new
// File(apkPath), apkPath,
// metrics, 0);
typeArgs = new Class[4];
typeArgs[0] = File.class;
typeArgs[1] = String.class;
typeArgs[2] = DisplayMetrics.class;
typeArgs[3] = Integer.TYPE;
Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage",
typeArgs);
valueArgs = new Object[4];
valueArgs[0] = new File(apkPath);
valueArgs[1] = apkPath;
valueArgs[2] = metrics;
valueArgs[3] = PackageManager.GET_SIGNATURES;
Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, valueArgs);

typeArgs = new Class[2];
typeArgs[0] = pkgParserPkg.getClass();
typeArgs[1] = Integer.TYPE;
Method pkgParser_collectCertificatesMtd = pkgParserCls.getDeclaredMethod("collectCertificates",
typeArgs);
valueArgs = new Object[2];
valueArgs[0] = pkgParserPkg;
valueArgs[1] = PackageManager.GET_SIGNATURES;
pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs);
// 应用程序信息包, 这个公开的, 不过有些函数, 变量没公开
Field packageInfoFld = pkgParserPkg.getClass().getDeclaredField("mSignatures");
Signature[] info = (Signature[]) packageInfoFld.get(pkgParserPkg);
MediaApplication.logD(DownloadApk.class, "size:"+info.length);
MediaApplication.logD(DownloadApk.class, info[0].toCharsString());
return info[0].toCharsString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


7、禁止view多点触控

if (android.os.Build.VERSION.SDK_INT >= 11) {
// Enable or disable the splitting of MotionEvents to multiple children during touch event dispatch.
// This behavior is enabled by default for applications that target an SDK version of Build.VERSION_CODES.HONEYCOMB or newer.
setMotionEventSplittingEnabled(false);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: