为方便查找,已进行大致归类,其目录如下所示:
dp与px转换 dp2px、px2dp
sp与px转换 sp2px、px2sp
各种单位转换 applyDimension
在onCreate()即可强行获取View的尺寸 forceGetViewSize
ListView中提前测量View尺寸(注释萌萌哒) measureView
获取设备MAC地址 getMacAddress
获取设备厂商,如Xiaomi getManufacturer
获取设备型号,如MI2SC getModel
获取设备SD卡是否可用 isSDCardEnable
获取设备SD卡路径 getSDCardPath
判断设备是否是手机 isPhone
获取手机的IMIE getDeviceIMEI
获取手机状态信息 getPhoneStatus
拨打电话 callDial
发送短信 sendSms
获取手机联系人 getAllContactInfo
打开手机联系人界面点击联系人后便获取该号码(注释萌萌哒) getContantNum
获取手机短信并保存到xml中 getAllSMS
打开网络设置界面 openWirelessSettings
判断是否网络连接 isConnected
判断wifi是否连接状态 isWifiConnected
获取移动网络运营商名称 getNetworkOperatorName
获取移动终端类型 getPhoneType
获取连接的网络类型(2G,3G,4G) getCurNetworkType
获取当前手机的网络类型(WIFI,2G,3G,4G) getNetWorkStatus
安装指定路径下的Apk installApk
卸载指定包名的App uninstallApp
获取当前App信息 getAppInfo
获取所有已安装App信息 getAllAppsInfo
打开指定包名的App openAppByPackageName
打开指定包名的App应用信息界面 openAppInfo
可用来做App信息分享 shareAppInfo
判断当前App处于前台还是后台 isApplicationBackground
获取手机分辨率 getDeviceWidth、getDeviceHeight
设置透明状态栏(api >= 19方可使用) setTransparentStatusBar
隐藏状态栏(注释萌萌哒) hideStatusBar
获取状态栏高度 getStatusBarHeight
获取状态栏高度+标题栏(ActionBar)高度 getTopBarHeight
设置屏幕为横屏(注释萌萌哒) setLandscape
获取屏幕截图 snapShotWithStatusBar、snapShotWithoutStatusBar
避免输入法面板遮挡
动态隐藏软键盘 hideSoftInput
点击屏幕空白区域隐藏软键盘(注释萌萌哒) clickBlankArea2HideSoftInput0
动态显示软键盘 showSoftInput
切换键盘显示与否状态 toggleSoftInput
正则工具类
MD5加密 encryptMD5
SHA加密 encryptSHA
获取服务是否开启 isRunningService
做这份整理只是想把它作为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
如想加群讨论学习,请关注微信公众号点击右下角的“加群学习”菜单入群。