Android 开发中的一些小技巧
dip转px
public int convertDipOrPx(int dip) { float scale = MarketApplication.getMarketApplicationContext() .getResources().getDisplayMetrics().density; return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1)); }
获取当前窗体,并添加自定义view:
getWindowManager() .addView( overlay, new WindowManager.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT));
自定义fastScrollBar图片样式:
try { Field f = AbsListView.class.getDeclaredField("mFastScroller"); f.setAccessible(true); Object o = f.get(listView); f = f.getType().getDeclaredField("mThumbDrawable"); f.setAccessible(true); Drawable drawable = (Drawable) f.get(o); drawable = getResources().getDrawable(R.drawable.ic_launcher); f.set(o, drawable); Toast.makeText(this, f.getType().getName(), 1000).show(); } catch (Exception e) { throw new RuntimeException(e); }
=网络==================================
判断网络是否可用:
/** * 网络是否可用 * * @param context * @return */ public static boolean isNetworkAvailable(Context context) { ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] info = mgr.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } return false; }
方法二:
/* * 判断网络连接是否已开 2012-08-20true 已打开 false 未打开 */ public static boolean isConn(Context context) { boolean bisConnFlag = false; ConnectivityManager conManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo network = conManager.getActiveNetworkInfo(); if (network != null) { bisConnFlag = conManager.getActiveNetworkInfo().isAvailable(); } return bisConnFlag; }
判断是不是Wifi连接:
public static boolean isWifiActive(Context icontext) { Context context = icontext.getApplicationContext(); ConnectivityManager connectivity = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] info; if (connectivity != null) { info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) { return true; } } } } return false; }
判断当前网络类型
/** * 网络方式检查 */ private static int netCheck(Context context) { ConnectivityManager conMan = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .getState(); State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState(); if (wifi.equals(State.CONNECTED)) { return DO_WIFI; } else if (mobile.equals(State.CONNECTED)) { return DO_3G; } else { return NO_CONNECTION; } }
获取下载文件的真实名字
public String getReallyFileName(String url) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() // 这里可以替换为detectAll() // 就包括了磁盘读写和网络I/O .penaltyLog() // 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() // 探测SQLite数据库操作 .penaltyLog() // 打印logcat .penaltyDeath().build()); String filename = ""; URL myURL; HttpURLConnection conn = null; if (url == null || url.length() < 1) { return null; } try { myURL = new URL(url); conn = (HttpURLConnection) myURL.openConnection(); conn.connect(); conn.getResponseCode(); URL absUrl = conn.getURL();// 获得真实Url // 打印输出服务器Header信息 // Map<String, List<String>> map = conn.getHeaderFields(); // for (String str : map.keySet()) { // if (str != null) { // Log.e("H3c", str + map.get(str)); // } // } filename = conn.getHeaderField("Content-Disposition");// 通过Content-Disposition获取文件名,这点跟服务器有关,需要灵活变通 if (filename == null || filename.length() < 1) { filename = URLDecoder.decode(absUrl.getFile(), "UTF-8"); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); conn = null; } } return filename; }
=图片==========================
bitmap转Byte数组(微信分享就需要用到)
public byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(CompressFormat.PNG, 100, output); if (needRecycle) { bmp.recycle(); } byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; }Resources转Bitmap
public Bitmap loadBitmap(Resources res, int id) { BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; InputStream is = res.openRawResource(id);// 获取资源图片 return BitmapFactory.decodeStream(is, null, opt); }保存图片到SD卡
public void saveBitmapToFile(String url, String filePath) { File iconFile = new File(filePath); if (!iconFile.getParentFile().exists()) { iconFile.getParentFile().mkdirs(); } if (iconFile.exists() && iconFile.length() > 0) { return; } FileOutputStream fos = null; InputStream is = null; try { fos = new FileOutputStream(filePath); is = new URL(url).openStream(); int data = is.read(); while (data != -1) { fos.write(data); data = is.read(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); } if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } }
=系统==============================
根据包名打开一个应用程序
public boolean openApp(String packageName) { PackageInfo pi = null; try { pi = mPM.getPackageInfo(packageName, 0); } catch (NameNotFoundException e) { e.printStackTrace(); return false; } if (pi == null) { return false; } Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(pi.packageName); List<ResolveInfo> apps = mPM.queryIntentActivities(resolveIntent, 0); ResolveInfo ri = null; try { ri = apps.iterator().next(); } catch (Exception e) { return true; } if (ri != null) { String tmpPackageName = ri.activityInfo.packageName; String className = ri.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); ComponentName cn = new ComponentName(tmpPackageName, className); intent.setComponent(cn); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); MarketApplication.getMarketApplicationContext().startActivity( intent); } else { return false; } return true; }
判断是否APK是否安装过
public boolean checkApkExist(Context context, String packageName) { if (packageName == null || "".equals(packageName)) return false; try { ApplicationInfo info = context.getPackageManager() .getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true; } catch (NameNotFoundException e) { return false; } catch (NullPointerException e) { return false; } }
安装APK
public void installApk(Context context, String strFileAllName) { File file = new File(strFileAllName); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); String type = "application/vnd.android.package-archive"; intent.setDataAndType(Uri.fromFile(file), type); context.startActivity(intent); }
卸载APK
public void UninstallApk(Context context, String strPackageName) { Uri packageURI = Uri.parse("package:" + strPackageName); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); context.startActivity(uninstallIntent); }
判断SD卡是否可用
public boolean CheckSD() { if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { return true; } else { return false; } }
创建快捷方式:
public void createShortCut(Context contxt) { // if (isInstallShortcut()) {// 如果已经创建了一次就不会再创建了 // return; // } Intent sIntent = new Intent(Intent.ACTION_MAIN); sIntent.addCategory(Intent.CATEGORY_LAUNCHER);// 加入action,和category之后,程序卸载的时候才会主动将该快捷方式也卸载 sIntent.setClass(contxt, Login.class); Intent installer = new Intent(); installer.putExtra("duplicate", false); installer.putExtra("android.intent.extra.shortcut.INTENT", sIntent); installer.putExtra("android.intent.extra.shortcut.NAME", "名字"); installer.putExtra("android.intent.extra.shortcut.ICON_RESOURCE", Intent.ShortcutIconResource .fromContext(contxt, R.drawable.icon)); installer.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); contxt.sendBroadcast(installer); }
判断快捷方式是否创建:
private boolean isInstallShortcut() { boolean isInstallShortcut = false; final ContentResolver cr = MarketApplication .getMarketApplicationContext().getContentResolver(); String AUTHORITY = "com.android.launcher.settings"; Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true"); Cursor c = cr.query(CONTENT_URI, new String[] { "title", "iconResource" }, "title=?", new String[] { "名字" }, null); if (c != null && c.getCount() > 0) { isInstallShortcut = true; } if (c != null) { c.close(); } if (isInstallShortcut) { return isInstallShortcut; } AUTHORITY = "com.android.launcher2.settings"; CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true"); c = cr.query(CONTENT_URI, new String[] { "title", "iconResource" }, "title=?", new String[] { "名字" }, null); if (c != null && c.getCount() > 0) { isInstallShortcut = true; } if (c != null) { c.close(); } AUTHORITY = "com.baidu.launcher"; CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true"); c = cr.query(CONTENT_URI, new String[] { "title", "iconResource" }, "title=?", new String[] { "名字" }, null); if (c != null && c.getCount() > 0) { isInstallShortcut = true; } if (c != null) { c.close(); } return isInstallShortcut; }
过滤特殊字符:
private String StringFilter(String str) throws PatternSyntaxException { // 只允许字母和数字 // String regEx = "[^a-zA-Z0-9]"; // 清除掉所有特殊字符 String regEx = "[`~!@#$%^&*()+=|{}':;',//[//].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); return m.replaceAll("").trim(); }
执行shell语句:
public int execRootCmdSilent(String cmd) { int result = -1; DataOutputStream dos = null; try { Process p = Runtime.getRuntime().exec("su"); dos = new DataOutputStream(p.getOutputStream()); dos.writeBytes(cmd + "\n"); dos.flush(); dos.writeBytes("exit\n"); dos.flush(); p.waitFor(); result = p.exitValue(); } catch (Exception e) { e.printStackTrace(); } finally { if (dos != null) { try { dos.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; }
获得文件MD5值:
public String getFileMD5(File file) { if (!file.isFile()) { return null; } MessageDigest digest = null; FileInputStream in = null; byte buffer[] = new byte[1024]; int len; try { digest = MessageDigest.getInstance("MD5"); in = new FileInputStream(file); while ((len = in.read(buffer, 0, 1024)) != -1) { digest.update(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); return null; } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } BigInteger bigInt = new BigInteger(1, digest.digest()); return bigInt.toString(16); }转自:http://blog.csdn.net/h3c4lenovo/article/details/16879435