首页 > 移动开发 > Android 开发中的一些小技巧

Android 开发中的一些小技巧

dip转px

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public int convertDipOrPx(int dip) {
  2.     float scale = MarketApplication.getMarketApplicationContext()
  3.             .getResources().getDisplayMetrics().density;
  4.     return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1));
  5. }

获取当前窗体,并添加自定义view:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. getWindowManager()
  2.                 .addView(
  3.                         overlay,
  4.                         new WindowManager.LayoutParams(
  5.                                 LayoutParams.WRAP_CONTENT,
  6.                                 LayoutParams.WRAP_CONTENT,
  7.                                 WindowManager.LayoutParams.TYPE_APPLICATION,
  8.                                 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  9.                                         | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
  10.                                 PixelFormat.TRANSLUCENT));

自定义fastScrollBar图片样式:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. try {
  2.     Field f = AbsListView.class.getDeclaredField("mFastScroller");
  3.     f.setAccessible(true);
  4.     Object o = f.get(listView);
  5.     f = f.getType().getDeclaredField("mThumbDrawable");
  6.     f.setAccessible(true);
  7.     Drawable drawable = (Drawable) f.get(o);
  8.     drawable = getResources().getDrawable(R.drawable.ic_launcher);
  9.     f.set(o, drawable);
  10.     Toast.makeText(this, f.getType().getName(), 1000).show();
  11. } catch (Exception e) {
  12.     throw new RuntimeException(e);
  13. }

=网络==================================

判断网络是否可用:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. /**
  2.      * 网络是否可用
  3.      *
  4.      * @param context
  5.      * @return
  6.      */
  7.     public static boolean isNetworkAvailable(Context context) {
  8.         ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  9.         NetworkInfo[] info = mgr.getAllNetworkInfo();
  10.         if (info != null) {
  11.             for (int i = 0; i < info.length; i++) {
  12.                 if (info[i].getState() == NetworkInfo.State.CONNECTED) {
  13.                     return true;
  14.                 }
  15.             }
  16.         }
  17.         return false;
  18.     }

方法二:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. /*
  2.  * 判断网络连接是否已开 2012-08-20true 已打开 false 未打开
  3.  */
  4. public static boolean isConn(Context context) {
  5.     boolean bisConnFlag = false;
  6.     ConnectivityManager conManager = (ConnectivityManager) context
  7.             .getSystemService(Context.CONNECTIVITY_SERVICE);
  8.     NetworkInfo network = conManager.getActiveNetworkInfo();
  9.     if (network != null) {
  10.         bisConnFlag = conManager.getActiveNetworkInfo().isAvailable();
  11.     }
  12.     return bisConnFlag;
  13. }

判断是不是Wifi连接:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public static boolean isWifiActive(Context icontext) {
  2.     Context context = icontext.getApplicationContext();
  3.     ConnectivityManager connectivity = (ConnectivityManager) context
  4.             .getSystemService(Context.CONNECTIVITY_SERVICE);
  5.     NetworkInfo[] info;
  6.     if (connectivity != null) {
  7.         info = connectivity.getAllNetworkInfo();
  8.         if (info != null) {
  9.             for (int i = 0; i < info.length; i++) {
  10.                 if (info[i].getTypeName().equals("WIFI")
  11.                         && info[i].isConnected()) {
  12.                     return true;
  13.                 }
  14.             }
  15.         }
  16.     }
  17.     return false;
  18. }

获取下载文件的真实名字

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public String getReallyFileName(String url) {
  2.     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
  3.             .detectDiskReads().detectDiskWrites().detectNetwork() // 这里可以替换为detectAll()
  4.                                                                   // 就包括了磁盘读写和网络I/O
  5.             .penaltyLog() // 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
  6.             .build());
  7.     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
  8.             .detectLeakedSqlLiteObjects() // 探测SQLite数据库操作
  9.             .penaltyLog() // 打印logcat
  10.             .penaltyDeath().build());
  11.     String filename = "";
  12.     URL myURL;
  13.     HttpURLConnection conn = null;
  14.     if (url == null || url.length() < 1) {
  15.         return null;
  16.     }
  17.     try {
  18.         myURL = new URL(url);
  19.         conn = (HttpURLConnection) myURL.openConnection();
  20.         conn.connect();
  21.         conn.getResponseCode();
  22.         URL absUrl = conn.getURL();// 获得真实Url
  23.         // 打印输出服务器Header信息
  24.         // Map> map = conn.getHeaderFields();
  25.         // for (String str : map.keySet()) {
  26.         // if (str != null) {
  27.         // Log.e("H3c", str + map.get(str));
  28.         // }
  29.         // }
  30.         filename = conn.getHeaderField("Content-Disposition");// 通过Content-Disposition获取文件名,这点跟服务器有关,需要灵活变通
  31.         if (filename == null || filename.length() < 1) {
  32.             filename = URLDecoder.decode(absUrl.getFile(), "UTF-8");
  33.         }
  34.     } catch (MalformedURLException e) {
  35.         e.printStackTrace();
  36.     } catch (IOException e) {
  37.         e.printStackTrace();
  38.     } finally {
  39.         if (conn != null) {
  40.             conn.disconnect();
  41.             conn = null;
  42.         }
  43.     }
  44.     return filename;
  45. }

=图片==========================

bitmap转Byte数组(微信分享就需要用到)

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
  2.         ByteArrayOutputStream output = new ByteArrayOutputStream();
  3.         bmp.compress(CompressFormat.PNG, 100, output);
  4.         if (needRecycle) {
  5.             bmp.recycle();
  6.         }
  7.         byte[] result = output.toByteArray();
  8.         try {
  9.             output.close();
  10.         } catch (Exception e) {
  11.             e.printStackTrace();
  12.         }
  13.         return result;
  14.     }

Resources转Bitmap

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public Bitmap loadBitmap(Resources res, int id) {
  2.         BitmapFactory.Options opt = new BitmapFactory.Options();
  3.         opt.inPreferredConfig = Bitmap.Config.RGB_565;
  4.         opt.inPurgeable = true;
  5.         opt.inInputShareable = true;
  6.         InputStream is = res.openRawResource(id);// 获取资源图片
  7.         return BitmapFactory.decodeStream(is, null, opt);
  8.     }

保存图片到SD卡

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public void saveBitmapToFile(String url, String filePath) {
  2.         File iconFile = new File(filePath);
  3.         if (!iconFile.getParentFile().exists()) {
  4.             iconFile.getParentFile().mkdirs();
  5.         }
  6.         if (iconFile.exists() && iconFile.length() > 0) {
  7.             return;
  8.         }
  9.         FileOutputStream fos = null;
  10.         InputStream is = null;
  11.         try {
  12.             fos = new FileOutputStream(filePath);
  13.             is = new URL(url).openStream();
  14.             int data = is.read();
  15.             while (data != -1) {
  16.                 fos.write(data);
  17.                 data = is.read();
  18.             }
  19.         } catch (IOException e) {
  20.             e.printStackTrace();
  21.         } finally {
  22.             try {
  23.                 if (is != null) {
  24.                     is.close();
  25.                 }
  26.                 if (fos != null) {
  27.                     fos.close();
  28.                 }
  29.             } catch (IOException e) {
  30.                 e.printStackTrace();
  31.             }
  32.         }
  33.     }

=系统==============================

根据包名打开一个应用程序

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public boolean openApp(String packageName) {
  2.     PackageInfo pi = null;
  3.     try {
  4.         pi = mPM.getPackageInfo(packageName, 0);
  5.     } catch (NameNotFoundException e) {
  6.         e.printStackTrace();
  7.         return false;
  8.     }
  9.     if (pi == null) {
  10.         return false;
  11.     }
  12.     Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
  13.     resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
  14.     resolveIntent.setPackage(pi.packageName);
  15.     List apps = mPM.queryIntentActivities(resolveIntent, 0);
  16.     ResolveInfo ri = null;
  17.     try {
  18.         ri = apps.iterator().next();
  19.     } catch (Exception e) {
  20.         return true;
  21.     }
  22.     if (ri != null) {
  23.         String tmpPackageName = ri.activityInfo.packageName;
  24.         String className = ri.activityInfo.name;
  25.         Intent intent = new Intent(Intent.ACTION_MAIN);
  26.         intent.addCategory(Intent.CATEGORY_LAUNCHER);
  27.         ComponentName cn = new ComponentName(tmpPackageName, className);
  28.         intent.setComponent(cn);
  29.         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  30.         MarketApplication.getMarketApplicationContext().startActivity(
  31.                 intent);
  32.     } else {
  33.         return false;
  34.     }
  35.     return true;
  36. }

判断是否APK是否安装过

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public boolean checkApkExist(Context context, String packageName) {
  2.         if (packageName == null || "".equals(packageName))
  3.             return false;
  4.         try {
  5.             ApplicationInfo info = context.getPackageManager()
  6.                     .getApplicationInfo(packageName,
  7.                             PackageManager.GET_UNINSTALLED_PACKAGES);
  8.             return true;
  9.         } catch (NameNotFoundException e) {
  10.             return false;
  11.         } catch (NullPointerException e) {
  12.             return false;
  13.         }
  14.     }

安装APK

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public void installApk(Context context, String strFileAllName) {
  2.     File file = new File(strFileAllName);
  3.     Intent intent = new Intent();
  4.     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  5.     intent.setAction(Intent.ACTION_VIEW);
  6.     String type = "application/vnd.android.package-archive";
  7.     intent.setDataAndType(Uri.fromFile(file), type);
  8.     context.startActivity(intent);
  9. }

卸载APK

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public void UninstallApk(Context context, String strPackageName) {
  2.     Uri packageURI = Uri.parse("package:" + strPackageName);
  3.     Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
  4.     context.startActivity(uninstallIntent);
  5. }

判断SD卡是否可用

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public boolean CheckSD() {
  2.     if (android.os.Environment.getExternalStorageState().equals(
  3.             android.os.Environment.MEDIA_MOUNTED)) {
  4.         return true;
  5.     } else {
  6.         return false;
  7.     }
  8. }

创建快捷方式:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public void createShortCut(Context contxt) {
  2.     // if (isInstallShortcut()) {// 如果已经创建了一次就不会再创建了
  3.     // return;
  4.     // }
  5.     Intent sIntent = new Intent(Intent.ACTION_MAIN);
  6.     sIntent.addCategory(Intent.CATEGORY_LAUNCHER);// 加入action,和category之后,程序卸载的时候才会主动将该快捷方式也卸载
  7.     sIntent.setClass(contxt, Login.class);
  8.     Intent installer = new Intent();
  9.     installer.putExtra("duplicate", false);
  10.     installer.putExtra("android.intent.extra.shortcut.INTENT", sIntent);
  11.     installer.putExtra("android.intent.extra.shortcut.NAME", "名字");
  12.     installer.putExtra("android.intent.extra.shortcut.ICON_RESOURCE",
  13.             Intent.ShortcutIconResource
  14.                     .fromContext(contxt, R.drawable.icon));
  15.     installer.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
  16.     contxt.sendBroadcast(installer);
  17. }

判断快捷方式是否创建:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. private boolean isInstallShortcut() {
  2.         boolean isInstallShortcut = false;
  3.         final ContentResolver cr = MarketApplication
  4.                 .getMarketApplicationContext().getContentResolver();
  5.         String AUTHORITY = "com.android.launcher.settings";
  6.         Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
  7.                 + "/favorites?notify=true");
  8.         Cursor c = cr.query(CONTENT_URI,
  9.                 new String[] { "title", "iconResource" }, "title=?",
  10.                 new String[] { "名字" }, null);
  11.         if (c != null && c.getCount() > 0) {
  12.             isInstallShortcut = true;
  13.         }
  14.         if (c != null) {
  15.             c.close();
  16.         }
  17.         if (isInstallShortcut) {
  18.             return isInstallShortcut;
  19.         }
  20.         AUTHORITY = "com.android.launcher2.settings";
  21.         CONTENT_URI = Uri.parse("content://" + AUTHORITY
  22.                 + "/favorites?notify=true");
  23.         c = cr.query(CONTENT_URI, new String[] { "title", "iconResource" },
  24.                 "title=?", new String[] { "名字" }, null);
  25.         if (c != null && c.getCount() > 0) {
  26.             isInstallShortcut = true;
  27.         }
  28.         if (c != null) {
  29.             c.close();
  30.         }
  31.         AUTHORITY = "com.baidu.launcher";
  32.         CONTENT_URI = Uri.parse("content://" + AUTHORITY
  33.                 + "/favorites?notify=true");
  34.         c = cr.query(CONTENT_URI, new String[] { "title", "iconResource" },
  35.                 "title=?", new String[] { "名字" }, null);
  36.         if (c != null && c.getCount() > 0) {
  37.             isInstallShortcut = true;
  38.         }
  39.         if (c != null) {
  40.             c.close();
  41.         }
  42.         return isInstallShortcut;
  43.     }

过滤特殊字符:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. private String StringFilter(String str) throws PatternSyntaxException {
  2.     // 只允许字母和数字
  3.     // String regEx = "[^a-zA-Z0-9]";
  4.     // 清除掉所有特殊字符
  5.     String regEx = "[`~!@#$%^&*()+=|{}':;',//[//].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
  6.     Pattern p = Pattern.compile(regEx);
  7.     Matcher m = p.matcher(str);
  8.     return m.replaceAll("").trim();
  9. }

执行shell语句:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public int execRootCmdSilent(String cmd) {
  2.     int result = -1;
  3.     DataOutputStream dos = null;
  4.     try {
  5.         Process p = Runtime.getRuntime().exec("su");
  6.         dos = new DataOutputStream(p.getOutputStream());
  7.         dos.writeBytes(cmd + "\n");
  8.         dos.flush();
  9.         dos.writeBytes("exit\n");
  10.         dos.flush();
  11.         p.waitFor();
  12.         result = p.exitValue();
  13.     } catch (Exception e) {
  14.         e.printStackTrace();
  15.     } finally {
  16.         if (dos != null) {
  17.             try {
  18.                 dos.close();
  19.             } catch (IOException e) {
  20.                 e.printStackTrace();
  21.             }
  22.         }
  23.     }
  24.     return result;
  25. }

获得文件MD5值:

[java][/java]

view plaincopy在CODE上查看代码片派生到我的代码片

  1. public String getFileMD5(File file) {
  2.     if (!file.isFile()) {
  3.         return null;
  4.     }
  5.     MessageDigest digest = null;
  6.     FileInputStream in = null;
  7.     byte buffer[] = new byte[1024];
  8.     int len;
  9.     try {
  10.         digest = MessageDigest.getInstance("MD5");
  11.         in = new FileInputStream(file);
  12.         while ((len = in.read(buffer, 0, 1024)) != -1) {
  13.             digest.update(buffer, 0, len);
  14.         }
  15.     } catch (Exception e) {
  16.         e.printStackTrace();
  17.         return null;
  18.     } finally {
  19.         if (in != null) {
  20.             try {
  21.                 in.close();
  22.             } catch (IOException e) {
  23.                 e.printStackTrace();
  24.             }
  25.         }
  26.     }
  27.     BigInteger bigInt = new BigInteger(1, digest.digest());
  28.     return bigInt.toString(16);
  29. }

本文固定链接: http://www.devba.com/index.php/archives/3638.html | 开发吧

报歉!评论已关闭.