Android常用代码段

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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值