Android开发中这些最重要的代码,你收集了吗?

2017 年 10 月 1 日 安全优佳 安小编
点击上方 “安全优佳” 可以订阅哦!
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;}

安全优佳

http://news.secwk.com

长按识别左侧二维码,关注我们


登录查看更多
0

相关内容

Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
100+篇《自监督学习(Self-Supervised Learning)》论文最新合集
专知会员服务
161+阅读 · 2020年3月18日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
38+阅读 · 2019年10月9日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
手把手教你用Python实现“坦克大战”,附详细代码!
机器学习算法与Python学习
11+阅读 · 2019年6月8日
已删除
架构文摘
3+阅读 · 2019年4月17日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
开发、调试计算机视觉代码有哪些技巧?
AI研习社
3+阅读 · 2018年7月9日
【资源】史上最全数据集汇总
七月在线实验室
18+阅读 · 2018年4月24日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
A Survey on Bayesian Deep Learning
Arxiv
60+阅读 · 2020年7月2日
Weight Poisoning Attacks on Pre-trained Models
Arxiv
5+阅读 · 2020年4月14日
Arxiv
3+阅读 · 2018年12月18日
Arxiv
7+阅读 · 2018年3月21日
Arxiv
6+阅读 · 2018年2月24日
VIP会员
相关VIP内容
Python导论,476页pdf,现代Python计算
专知会员服务
254+阅读 · 2020年5月17日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
100+篇《自监督学习(Self-Supervised Learning)》论文最新合集
专知会员服务
161+阅读 · 2020年3月18日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
一网打尽!100+深度学习模型TensorFlow与Pytorch代码实现集合
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
38+阅读 · 2019年10月9日
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
手把手教你用Python实现“坦克大战”,附详细代码!
机器学习算法与Python学习
11+阅读 · 2019年6月8日
已删除
架构文摘
3+阅读 · 2019年4月17日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
开发、调试计算机视觉代码有哪些技巧?
AI研习社
3+阅读 · 2018年7月9日
【资源】史上最全数据集汇总
七月在线实验室
18+阅读 · 2018年4月24日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
Top
微信扫码咨询专知VIP会员