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);
State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
if (state == State.CONNECTED||state == State.CONNECTING){
return NETWORN_WIFI;
}
state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
if (state == State.CONNECTED||state == State.CONNECTING){
return NETWORN_MOBILE;
}
return NETWORN_NONE;
}
}
3、Popwindow点击外部消失
from:http:
首先要给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文件的签名信息
private String showUninstallAPKSignatures (String apkPath) {
String PATH_PackageParser = "android.content.pm.PackageParser" ;
try {
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();
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 ) {
setMotionEventSplittingEnabled(false );
}