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); }
相关文章推荐
- 【Android】获取Mac地址
- Android设计模式(七)--原型模式
- Android Studio 常用快捷键
- Android 自定义View
- android开发图表achartengine之柱状图
- Android AES加密算法,现在实际上
- Android 获取Device信息源代码分析
- Android 47个小知识
- "Selenium for Android"的Robotium 概述
- Android源码ackages开发——Settings
- android关于导入工程报错、常见问题解决
- 打造android万能上拉下拉刷新框架——XRefreshView (一)
- android 获取资源文件 r.drawable中的图片转换为drawable、bitmap
- Mac下idea14配置Android_SDK配置
- Android View.post(Runnable )
- android调用系统相机、调用系统相册,调用系统图片裁剪报错的解决方案
- Android常用工具类(收藏)
- 我的Android系统学习笔记——HAL
- Android多分辨率适配经验总结
- android开源框架之 andbase