Android開發中這些最重要的代碼,你收集了嗎?

DIALOG 文章 技術 程序愛好猿 程序愛好猿 2017-09-30
導語:Android開發中,收集一些常用的代碼工具類是非常重要的。現在Android開發技術已經很成熟了,很多代碼大牛已經寫出了很多框架和工具類,我們現在應該要站在巨人的肩膀上做開發了。今天我把平時開發中收集最常用的 10 個工具類,分享給大家。以後開發中合理利用,對於在平時開發中的效率是非常有幫助的 。如果你需要下面的代碼,可以私信給我。已經整理成一個完整的文檔了。

1、安裝應用APK

// 安裝應用APK private void installApk(String apkFilePath) { File apkfile = new File(apkFilePath);  if (!apkfile.exists()) {  return; } Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive"); startActivity(i); }}

2、MD5算法

public final static String MD5(String s) { char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; try { byte[] btInput = s.getBytes(); // 獲得MD5摘要算法的 MessageDigest 對象 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字節更新摘要 mdInst.update(btInput); // 獲得密文 byte[] md = mdInst.digest(); // 把密文轉換成十六進制的字符串形式 int j = md.length;  char str[] = new char[j * 2];  int k = 0; //把字節轉換成對應的字符串 for (int i = 0; i < j; i++) {  byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; }  return new String(str); } catch (Exception e) { e.printStackTrace();  return null; } }

3、判斷現在是否有網絡

private boolean NetWorkStatus() { ConnectivityManager cwjManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); cwjManager.getActiveNetworkInfo();  boolean netSataus = true;  if (cwjManager.getActiveNetworkInfo() != null) { netSataus = cwjManager.getActiveNetworkInfo().isAvailable(); Toast.makeText(this, "網絡已經打開", Toast.LENGTH_LONG).show(); } else { Builder b = new AlertDialog.Builder(this).setTitle("沒有可用的網絡") .setMessage("是否對網絡進行設置?"); b.setPositiveButton("是", new DialogInterface.OnClickListener()  {  public void onClick(DialogInterface dialog, int whichButton) { Intent mIntent = new Intent("/"); ComponentName comp = new ComponentName( "com.android.settings", "com.android.settings.WirelessSettings"); mIntent.setComponent(comp); mIntent.setAction("android.intent.action.VIEW"); startActivityForResult(mIntent,0);  } }).setNeutralButton("否", new DialogInterface.OnClickListener() {  public void onClick(DialogInterface dialog, int whichButton) { dialog.cancel(); } }).show(); }  return netSataus; }

4、獲取設備屏幕的寬度高度密度

public class DisplayUtil {  /** * 得到設備屏幕的寬度 */ public static int getScreenWidth(Context context) {  return context.getResources().getDisplayMetrics().widthPixels; } /** * 得到設備屏幕的高度 */ public static int getScreenHeight(Context context) {  return context.getResources().getDisplayMetrics().heightPixels; } /** * 得到設備的密度 */ public static float getScreenDensity(Context context) {  return context.getResources().getDisplayMetrics().density; } }

5、dp、sp 轉換為 px 的工具類

public class DisplayUtil {  /** * 將px值轉換為dip或dp值,保證尺寸大小不變 */ public static int px2dip(Context context, float pxValue) {  final float scale = context.getResources().getDisplayMetrics().density;  return (int) (pxValue / scale + 0.5f); } /** * 將dip或dp值轉換為px值,保證尺寸大小不變 *  * @param dipValue * @param scale * (DisplayMetrics類中屬性density) * @return */ public static int dip2px(Context context, float dipValue) {  final float scale = context.getResources().getDisplayMetrics().density;  return (int) (dipValue * scale + 0.5f); } /** * 將px值轉換為sp值,保證文字大小不變 *  * @param pxValue * @param fontScale * (DisplayMetrics類中屬性scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) {  final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  return (int) (pxValue / fontScale + 0.5f); } /** * 將sp值轉換為px值,保證文字大小不變 *  * @param spValue * @param fontScale * (DisplayMetrics類中屬性scaledDensity) * @return */ public static int sp2px(Context context, float spValue) {  final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  return (int) (spValue * fontScale + 0.5f); } }

6、drawable轉bitmap的工具類

/** * drawable轉bitmap * * @param drawable * @return */private Bitmap drawableToBitamp(Drawable drawable) {  if (null == drawable) { return null; }if (drawable instanceof BitmapDrawable) { BitmapDrawable bd = (BitmapDrawable) drawable;  return bd.getBitmap(); } int w = drawable.getIntrinsicWidth();  int h = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, w, h); drawable.draw(canvas);  return bitmap;}

7、文章發佈模仿朋友圈時間顯示

 public static String ChangeTime(Date time) { String ftime = ""; Calendar cal = Calendar.getInstance(); // 判斷是否是同一天 String curDate = dateFormater2.get().format(cal.getTime()); String paramDate = dateFormater2.get().format(time);  if (curDate.equals(paramDate)) {  int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);  if (hour == 0) ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分鐘前";  else ftime = hour + "小時前";  return ftime; } long lt = time.getTime() / 86400000;  long ct = cal.getTimeInMillis() / 86400000;  int days = (int) (ct - lt);  if (days == 0) {  int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);  if (hour == 0) ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分鐘前";  else ftime = hour + "小時前"; } else if (days == 1) { ftime = "昨天"; } else if (days == 2) { ftime = "前天 "; } else if (days > 2 && days < 31) { ftime = days + "天前"; } else if (days >= 31 && days <= 2 * 31) { ftime = "一個月前"; } else if (days > 2 * 31 && days <= 3 * 31) { ftime = "2個月前"; } else if (days > 3 * 31 && days <= 4 * 31) { ftime = "3個月前"; } else { ftime = dateFormater2.get().format(time); } return ftime; } public static String friendly_time(String sdate) { Date time = null; if (TimeZoneUtil.isInEasternEightZones()) time = toDate(sdate); else time = TimeZoneUtil.transformTime(toDate(sdate), TimeZone.getTimeZone("GMT+08"), TimeZone.getDefault());  if (time == null) { return "Unknown"; } String ftime = ""; Calendar cal = Calendar.getInstance(); // 判斷是否是同一天 String curDate = dateFormater2.get().format(cal.getTime()); String paramDate = dateFormater2.get().format(time);  if (curDate.equals(paramDate)) {  int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);  if (hour == 0) ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分鐘前";  else ftime = hour + "小時前";  return ftime; } long lt = time.getTime() / 86400000;  long ct = cal.getTimeInMillis() / 86400000;  int days = (int) (ct - lt);  if (days == 0) {  int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);  if (hour == 0) ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分鐘前";  else ftime = hour + "小時前"; } else if (days == 1) { ftime = "昨天"; } else if (days == 2) { ftime = "前天 "; } else if (days > 2 && days < 31) { ftime = days + "天前"; } else if (days >= 31 && days <= 2 * 31) { ftime = "一個月前"; } else if (days > 2 * 31 && days <= 3 * 31) { ftime = "2個月前"; } else if (days > 3 * 31 && days <= 4 * 31) { ftime = "3個月前"; } else { ftime = dateFormater2.get().format(time); } return ftime; }

8、時間格式轉換工具類

public static String ConverToString(Date date) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  return df.format(date); } public static String ConverToString2(Date date){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");  return df.format(date); } public static String ConverToString3(Date date){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  return df.format(date); }

9、驗證碼倒計時工具類

public class TimeCount extends CountDownTimer { private Button button; /** * 到計時 * @param millisInFuture 到計時多久,毫秒 * @param countDownInterval 週期 * @param button 按鈕 */ public TimeCount(long millisInFuture, long countDownInterval,Button button) {  super(millisInFuture, countDownInterval); this.button =button; } public TimeCount(long millisInFuture, long countDownInterval) {  super(millisInFuture, countDownInterval); } @Override public void onFinish() {// 計時完畢 button.setText("獲取驗證碼"); button.setClickable(true); button.setBackground(MyApplication.getContext().getResources().getDrawable(R.drawable.radius14)); }  @Override public void onTick(long millisUntilFinished) {// 計時過程 button.setClickable(false);//防止重複點擊 button.setText(millisUntilFinished / 1000 + "s後重試"); button.setBackground(MyApplication.getContext().getResources().getDrawable(R.drawable.radius_gray)); }}

10、屏幕截圖工具類

public class ScreenShot { public static void shoot(Activity a, File filePath) {if (filePath == null) { return;} if (!filePath.getParentFile().exists()) {filePath.getParentFile().mkdirs();}FileOutputStream fos = null;try {fos = new FileOutputStream(filePath);if (null != fos) {takeScreenShot(a).compress(Bitmap.CompressFormat.PNG, 100, fos);}} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.flush();fos.close();} catch (IOException e) {e.printStackTrace();}}}} private static Bitmap takeScreenShot(Activity activity) {View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bitmap = view.getDrawingCache();Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;int width = activity.getWindowManager().getDefaultDisplay().getWidth();int height = activity.getWindowManager().getDefaultDisplay().getHeight(); //去掉標題欄Bitmap b = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width,height - statusBarHeight);view.destroyDrawingCache(); return b;}}

本文屬於原創,如有轉載,請標註原作者,版權歸本頭條號所有。如果你喜歡我寫的文章,歡迎大家繼續關注本頭條號的技術文章。如果您覺得這篇文章對你有所幫助的話,不妨點個贊哈,您的支持就是我堅持原創的動力。

相關推薦

推薦中...