[干货]Android开发人员不得不收集的代码(不断更新)
来源:互联网 发布:免费crm系统源码下载 编辑:程序博客网 时间:2024/04/28 09:53
代码地址链接:[干货]Android开发人员不得不收集的代码
为方便查找,已进行大致归类,其目录如下所示:
尺寸相关→SizeUtils.java
dp与px转换 dp2px、px2dp
sp与px转换 sp2px、px2sp
各种单位转换 applyDimension
在onCreate()即可强行获取View的尺寸 forceGetViewSize
ListView中提前测量View尺寸(注释萌萌哒) measureView
设备相关→DeviceUtils.java
获取设备MAC地址 getMacAddress
获取设备厂商,如Xiaomi getManufacturer
获取设备型号,如MI2SC getModel
获取设备SD卡是否可用 isSDCardEnable
获取设备SD卡路径 getSDCardPath
手机相关→PhoneUtils.java
判断设备是否是手机 isPhone
获取手机的IMIE getDeviceIMEI
获取手机状态信息 getPhoneStatus
拨打电话 callDial
发送短信 sendSms
获取手机联系人 getAllContactInfo
打开手机联系人界面点击联系人后便获取该号码(注释萌萌哒) getContantNum
获取手机短信并保存到xml中 getAllSMS
网络相关→NetworkUtils.java
打开网络设置界面 openWirelessSettings
判断是否网络连接 isConnected
判断wifi是否连接状态 isWifiConnected
获取移动网络运营商名称 getNetworkOperatorName
获取移动终端类型 getPhoneType
获取连接的网络类型(2G,3G,4G) getCurNetworkType
获取当前手机的网络类型(WIFI,2G,3G,4G) getNetWorkStatus
App相关→AppUtils.java
安装指定路径下的Apk installApk
卸载指定包名的App uninstallApp
获取当前App信息 getAppInfo
获取所有已安装App信息 getAllAppsInfo
打开指定包名的App openAppByPackageName
打开指定包名的App应用信息界面 openAppInfo
可用来做App信息分享 shareAppInfo
判断当前App处于前台还是后台 isApplicationBackground
屏幕相关→ScreenUtils.java
获取手机分辨率 getDeviceWidth、getDeviceHeight
设置透明状态栏(api >= 19方可使用) setTransparentStatusBar
隐藏状态栏(注释萌萌哒) hideStatusBar
获取状态栏高度 getStatusBarHeight
获取状态栏高度+标题栏(ActionBar)高度 getTopBarHeight
设置屏幕为横屏(注释萌萌哒) setLandscape
获取屏幕截图 snapShotWithStatusBar、snapShotWithoutStatusBar
键盘相关→KeyboardUtils.java
避免输入法面板遮挡
动态隐藏软键盘 hideSoftInput
点击屏幕空白区域隐藏软键盘(注释萌萌哒) clickBlankArea2HideSoftInput0
动态显示软键盘 showSoftInput
切换键盘显示与否状态 toggleSoftInput
正则相关→RegularUtils.java
正则工具类
加解密相关→EncryptUtils.java
MD5加密 encryptMD5
SHA加密 encryptSHA
未归类→UnclassifiedUtils.java
获取服务是否开启 isRunningService
更新Log
做这份整理只是想把它作为Android的一本小字典,当遇到一些琐碎问题时,不用再面向百度或者谷歌查询API的使用,费时费力,这里有的话,大家尽管撸走。希望它能逐日壮大起来,期待你的Star和完善,用途的话大家想把它们整理成工具类或者什么的话都可以,之后我也会封装工具类并分享之,但本篇只是提供查阅,毕竟看md比看类文件要爽多了,其中好多代码我也是各种搜刮来的,也要谢谢各位的总结,大部分代码已验证过可行,如有错误,请及时告之,开设微信群(微信群满,请加运营微信AMPRE拉你入群)和QQ群(群号:558902989 )提供讨论。
分类已上传至Github,传送门→期待你的Star和完善
好了,废话不多说,开始开车,嘟嘟......
尺寸相关
dp与px转换
sp与px转换
各种单位转换
在onCreate()即可强行获取View的尺寸
ListView中提前测量View尺寸
设备相关
获取设备MAC地址
获取设备厂商,如Xiaomi
获取设备型号,如MI2SC
获取设备SD卡是否可用
获取设备SD卡路径
手机相关
判断设备是否是手机
获取手机的IMIE
获取手机状态信息
拨打电话
发送短信
获取手机联系人
打开手机联系人界面点击联系人后便获取该号码
获取手机短信并保存到xml中
/** * 获取手机短信并保存到xml中 * 需添加权限
* <uses-permission android:name="android.permission.READ_SMS"/> * 需添加权限
* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> */
public static void getAllSMS(Context context) { //1.获取短信 //1.1获取内容解析者 ContentResolver resolver = context.getContentResolver();
//1.2获取内容提供者地址 sms,sms表的地址:null 不写 //1.3获取查询路径 Uri uri = Uri.parse("content://sms"); //1.4.查询操作 //projection : 查询的字段 //selection : 查询的条件 //selectionArgs : 查询条件的参数 //sortOrder : 排序 Cursor cursor = resolver.query(
uri,new String[]{"address", "date", "type", "body"},null,null,null);
int count = cursor.getCount();//获取短信的个数 //2.备份短信 //2.1获取xml序列器 XmlSerializer xmlSerializer = Xml.newSerializer();
try {
//2.2设置xml文件保存的路径 //os : 保存的位置 //encoding : 编码格式 xmlSerializer.setOutput(new FileOutputStream(
new File("/mnt/sdcard/backupsms.xml")), "utf-8");
//2.3设置头信息 //standalone : 是否独立保存 xmlSerializer.startDocument("utf-8", true); //2.4设置根标签 xmlSerializer.startTag(null, "smss"); //1.5.解析cursor while (cursor.moveToNext()) { SystemClock.sleep(1000); //2.5设置短信的标签 xmlSerializer.startTag(null, "sms"); //2.6设置文本内容的标签 xmlSerializer.startTag(null, "address"); String address = cursor.getString(0); //2.7设置文本内容 xmlSerializer.text(address); xmlSerializer.endTag(null, "address"); xmlSerializer.startTag(null, "date"); String date = cursor.getString(1); xmlSerializer.text(date); xmlSerializer.endTag(null, "date"); xmlSerializer.startTag(null, "type"); String type = cursor.getString(2); xmlSerializer.text(type); xmlSerializer.endTag(null, "type"); xmlSerializer.startTag(null, "body"); String body = cursor.getString(3); xmlSerializer.text(body); xmlSerializer.endTag(null, "body"); xmlSerializer.endTag(null, "sms"); System.out.println("address:" + address + " date:"
+ date + " type:" + type + " body:" + body); } xmlSerializer.endTag(null, "smss"); xmlSerializer.endDocument(); //2.8将数据刷新到文件中 xmlSerializer.flush(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }}
网络相关
打开网络设置界面
判断是否网络连接
判断wifi是否连接状态
获取移动网络运营商名称
获取移动终端类型
获取连接的网络类型(2G,3G,4G)
获取当前手机的网络类型(WIFI,2G,3G,4G)
App相关
安装指定路径下的Apk
/** * 安装指定路径下的Apk * 根据路径名是否符合和文件是否存在判断是否安装成功 * 更好的做法应该是startActivityForResult回调判断是否安装成功比较妥当 * 这里做不了回调,后续自己做处理 */
public static boolean installApp(Context context, String filePath) {
if (filePath != null && filePath.length() > 4 && filePath.toLowerCase().substring(
filePath.length() - 4).equals(".apk")) { Intent intent = new Intent(Intent.ACTION_VIEW); File file = new File(filePath);
if (file.exists() && file.isFile() && file.length() > 0) { intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent);
return true; } }
return false;}
卸载指定包名的App
获取当前App信息
获取所有已安装App信息
打开指定包名的App
打开指定包名的App应用信息界面
可用来做App信息分享
判断当前App处于前台还是后台
屏幕相关
获取手机分辨率
/*** 获取屏幕的宽度px*/
public static int getDeviceWidth(Context context) { WindowManager windowManager = (WindowManager)
context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸 windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高 return outMetrics.widthPixels;}
/*** 获取屏幕的高度px*/
public static int getDeviceHeight(Context context) { WindowManager windowManager = (WindowManager)
context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸 windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高 return outMetrics.heightPixels;}
获取状态栏高度
/*** 获取状态栏高度*/
public int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier(
"status_bar_height", "dimen", "android"); if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId); }
return result;}
获取ActionBar高度
/** * 获取ActionBar高度 */
public static int getActionBarHeight(Activity activity) { TypedValue tv = new TypedValue();
if (activity.getTheme().resolveAttribute(
android.R.attr.actionBarSize, tv, true)) {
return TypedValue.complexToDimensionPixelSize(
tv.data, activity.getResources().getDisplayMetrics()); }
return 0;}
获取屏幕截图
/** * 获取当前屏幕截图,包含状态栏 */
public static Bitmap captureWithStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache();
int width = getScreenWidth(activity);
int height = getScreenHeight(activity); Bitmap bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache();
return bp;}
/** * 获取当前屏幕截图,不包含状态栏 * 需要用到上面获取状态栏高度的方法 */
public static Bitmap captureWithoutStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache();
int statusBarHeight = getStatusBarHeight(activity);
int width = getScreenWidth(activity);
int height = getScreenHeight(activity); Bitmap bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width,
height - statusBarHeight); view.destroyDrawingCache();
return bp;}
设置透明状态栏(api >= 19方可使用)
/*** 设置透明状态栏(api >= 19方可使用)* 可在Activity的onCreat()中调用* 需在顶部控件布局中加入以下属性让内容出现在状态栏之下* android:clipToPadding="true"* android:fitsSystemWindows="true"*/
public static void setTransparentStatusBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 activity.getWindow().addFlags(WindowManager.LayoutParams.
FLAG_TRANSLUCENT_STATUS); //透明导航栏 activity.getWindow().addFlags(WindowManager.LayoutParams.
FLAG_TRANSLUCENT_NAVIGATION); }}
键盘相关
避免输入法面板遮挡
// 在manifest.xml中activity中设置
android:windowSoftInputMode="stateVisible|adjustResize"
动态隐藏软键盘
点击屏幕空白区域隐藏软键盘
/** * 点击屏幕空白区域隐藏软键盘(方法1) * 在onTouch中处理,未获焦点则隐藏 * 参照以下注释代码 */
public static void clickBlankArea2HideSoftInput0() { Log.i("tips", "U should copy the following code."); @Override public boolean onTouchEvent (MotionEvent event){ if (null != this.getCurrentFocus()) { InputMethodManager mInputMethodManager = (InputMethodManager)
getSystemService(INPUT_METHOD_SERVICE); return mInputMethodManager.hideSoftInputFromWindow(
this.getCurrentFocus().getWindowToken(), 0); } return super.onTouchEvent(event); } }
/** * 点击屏幕空白区域隐藏软键盘(方法2) * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘 * 需重写dispatchTouchEvent * 参照以下注释代码 */
public static void clickBlankArea2HideSoftInput1() { Log.i("tips", "U should copy the following code."); @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, ev)) { hideKeyboard(v.getWindowToken()); } } return super.dispatchTouchEvent(ev); } // 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘 private boolean isShouldHideKeyboard(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationInWindow(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); return !(event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom); } return false; } // 获取InputMethodManager,隐藏软键盘 private void hideKeyboard(IBinder token) { if (token != null) { InputMethodManager im = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } }}
动态显示软键盘
切换键盘显示与否状态
正则相关
正则工具类
public class RegularUtils {
//验证手机号 private static final String REGEX_MOBILE =
"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";
//验证座机号,正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx private static final String REGEX_TEL = "^0\\d{2,3}[- ]?\\d{7,8}";
//验证邮箱 private static final String REGEX_EMAIL =
"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
//验证url private static final String REGEX_URL =
"http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";
//验证汉字 private static final String REGEX_CHZ = "^[\\u4e00-\\u9fa5]+$";
//验证用户名,取值范围为a-z,A-Z,0-9,"_",汉字,不能以"_"结尾,用户名必须是6-20位 private static final String REGEX_USERNAME =
"^[\\w\\u4e00-\\u9fa5]{6,20}(?<!_)$";
//验证IP地址 private static final String REGEX_IP =
"((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";
//If u want more please visit http://toutiao.com/i6231678548520731137/ /** * @param string 待验证文本 * @return 是否符合手机号格式 */public static boolean isMobile(String string) {
return isMatch(REGEX_MOBILE, string);}
/** * @param string 待验证文本 * @return 是否符合座机号码格式 */
public static boolean isTel(String string) {
return isMatch(REGEX_TEL, string); }
/** * @param string 待验证文本 * @return 是否符合邮箱格式*/public static boolean isEmail(String string) {
return isMatch(REGEX_EMAIL, string);}
/** * @param string 待验证文本 * @return 是否符合网址格式*/public static boolean isURL(String string) {
return isMatch(REGEX_URL, string);}
/** * @param string 待验证文本 * @return 是否符合汉字*/public static boolean isChz(String string) {
return isMatch(REGEX_CHZ, string);}
/** * @param string 待验证文本 * @return 是否符合用户名*/public static boolean isUsername(String string) {
return isMatch(REGEX_USERNAME, string);}
/** * @param regex 正则表达式字符串 * @param string 要匹配的字符串 * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;*/public static boolean isMatch(String regex, String string) {
return !TextUtils.isEmpty(string) && Pattern.matches(regex, string);}
}
加解密相关
MD5加密
SHA加密
未归类
获取服务是否开启
关于Java和Android大牛频道
Java和Android大牛频道是一个数万人关注的探讨Java和Android开发的公众号,分享和原创最有价值的干货文章,让你成为这方面的大牛!
我们探讨android和Java开发最前沿的技术:android性能优化 ,插件化,动态化,跨平台,动态化,加固和反破解等,也讨论设计模式/软件架构等。由一群来自BAT的工程师组成的团队。
关注即送红包,回复:“百度” 、“阿里”、“腾讯” 有惊喜!!!关注后可用入微信群。群里都是来自百度阿里腾讯的大牛。
欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。或搜索微信公众号:JANiubility。
公众号:JANiubility
如想加群讨论学习,请关注微信公众号点击右下角的“加群学习”菜单入群。
- [干货]Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新)
- 【转】Android开发人员不得不收集的代码(不断更新)
- Android开发人员不得不收集的代码(不断更新中...)
- Android开发人员不得不收集的代码
- Android开发人员不得不收集的代码
- Android开发人员不得不收集的代码
- Android开发人员不得不收集的代码
- Android--开发人员不得不收集的代码
- Android开发人员不得不收集的代码
- Android开发人员不得不收集的代码
- 项目管理:如何让例会高效
- 按钮设置disabled
- ASP.NET能知道的东西
- PHP stdclass转array的方法
- Deep Linking打破APP信息孤岛
- [干货]Android开发人员不得不收集的代码(不断更新)
- 关于js两个函数定时执行产生的冲突问题
- 设计模式之动态代理 jdk实现
- hibernate 锁
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- 如何做一个完全失败的UX设计师?
- 对社交媒体的使用习惯,揭示了人的情绪趋势
- POI的Excel核心类
- Datatable的Select()方法简介