提交 119e2207 编写于 作者: B blankj

modify encode

上级 94ad8893
# Android开发人员不得不收集的代码(不断更新)
为方便查找,已进行大致归类,其大纲如下所示:
- [尺寸相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_size.md)
- dp与px转换
- sp与px转换
- 各种单位转换
- 在onCreate()即可获取View的宽高
- ListView中提前测量View尺寸
- [手机相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_phone.md)
- 判断设备是否是手机
- 获取当前设备的IMIE,需与上面的isPhone一起使用
- 获取手机状态信息
- 是否有SD卡
- 获取MAC地址
- 获取手机厂商,如Xiaomi
- 获取手机型号,如MI2SC
- 跳转至拨号界面
- 拨打电话
- 发送短信
- 获取手机联系人
- 直接打开手机联系人界面,并获取联系人号码
- 获取手机短信并保存到xml中
- [网络相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_net.md)
- 打开网络设置界面
- 判断是否网络连接
- 判断wifi是否连接状态
- 获取移动网络运营商名称,如中国联通、中国移动、中国电信
- 返回移动终端类型
- 判断手机连接的网络类型(2G,3G,4G)
- 判断当前手机的网络类型(WIFI还是2,3,4G)
- [App相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_app.md)
- 安装指定路径下的Apk
- 卸载指定包名的App
- 获取App名称
- 获取当前App版本号
- 打开指定包名的App
- 打开指定包名的App应用信息界面
- 分享Apk信息
- 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)
- 判断当前App处于前台还是后台
- [屏幕相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_screen.md)
- 获取手机分辨率
- 获取状态栏高度
- 获取状态栏高度+标题栏(ActionBar)高度
- 获取屏幕截图
- 设置透明状态栏,需在setContentView之前调用
- [键盘相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_keyboard.md)
- 避免输入法面板遮挡
- 动态隐藏软键盘
- 点击屏幕空白区域隐藏软键盘
- 动态显示软键盘
- 切换键盘显示与否状态
- [正则相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_regular.md)
- 正则工具类
- [加解密相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_encrypt.md)
- MD5加密
- SHA加密
- [未归类](https://github.com/Blankj/AndroidUtilCode/blob/master/unclassified.md)
- 获取服务是否开启
# Android开发人员不得不收集的代码(不断更新)
为方便查找,已进行大致归类,其大纲如下所示:
- [尺寸相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_size.md)
- dp与px转换
- sp与px转换
- 各种单位转换
- 在onCreate()即可获取View的宽高
- ListView中提前测量View尺寸
- [手机相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_phone.md)
- 判断设备是否是手机
- 获取当前设备的IMIE,需与上面的isPhone一起使用
- 获取手机状态信息
- 是否有SD卡
- 获取MAC地址
- 获取手机厂商,如Xiaomi
- 获取手机型号,如MI2SC
- 跳转至拨号界面
- 拨打电话
- 发送短信
- 获取手机联系人
- 直接打开手机联系人界面,并获取联系人号码
- 获取手机短信并保存到xml中
- [网络相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_net.md)
- 打开网络设置界面
- 判断是否网络连接
- 判断wifi是否连接状态
- 获取移动网络运营商名称,如中国联通、中国移动、中国电信
- 返回移动终端类型
- 判断手机连接的网络类型(2G,3G,4G)
- 判断当前手机的网络类型(WIFI还是2,3,4G)
- [App相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_app.md)
- 安装指定路径下的Apk
- 卸载指定包名的App
- 获取App名称
- 获取当前App版本号
- 打开指定包名的App
- 打开指定包名的App应用信息界面
- 分享Apk信息
- 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)
- 判断当前App处于前台还是后台
- [屏幕相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_screen.md)
- 获取手机分辨率
- 获取状态栏高度
- 获取状态栏高度+标题栏(ActionBar)高度
- 获取屏幕截图
- 设置透明状态栏,需在setContentView之前调用
- [键盘相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_keyboard.md)
- 避免输入法面板遮挡
- 动态隐藏软键盘
- 点击屏幕空白区域隐藏软键盘
- 动态显示软键盘
- 切换键盘显示与否状态
- [正则相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_regular.md)
- 正则工具类
- [加解密相关](https://github.com/Blankj/AndroidUtilCode/blob/master/about_encrypt.md)
- MD5加密
- SHA加密
- [未归类](https://github.com/Blankj/AndroidUtilCode/blob/master/unclassified.md)
- 获取服务是否开启
大部分代码已验证过可行,如有错误,请及时告之。
期待你的Star和完善...
\ No newline at end of file
大部分代码已验证过可行,如有错误,请及时告之。
期待你的Star和完善...
\ No newline at end of file
# App相关
### 安装指定路径下的Apk
# App相关
### 安装指定路径下的Apk
``` java
/**
* 安装指定路径下的Apk
* 安装指定路径下的Apk
*/
public void installApk(String filePath) {
Intent intent = new Intent();
......@@ -13,10 +13,10 @@ public void installApk(String filePath) {
}
```
### 卸载指定包名的App
### 卸载指定包名的App
``` java
/**
* 卸载指定包名的App
* 卸载指定包名的App
*/
public void uninstallApp(String packageName) {
Intent intent = new Intent();
......@@ -27,10 +27,10 @@ public void uninstallApp(String packageName) {
}
```
### 获取App名称
### 获取App名称
```
/**
* 获取App名称
* 获取App名称
*/
public static String getAppName(Context context) {
try {
......@@ -47,10 +47,10 @@ public static String getAppName(Context context) {
```
### 获取当前App版本号
### 获取当前App版本号
``` java
/**
* 获取当前App版本号
* 获取当前App版本号
*/
public static String getVersonName(Context context) {
String versionName = null;
......@@ -68,10 +68,10 @@ public static String getVersonName(Context context) {
}
```
### 打开指定包名的App
### 打开指定包名的App
```
/**
* 打开指定包名的App
* 打开指定包名的App
*/
public void openOtherApp(String packageName){
PackageManager manager = getPackageManager();
......@@ -82,10 +82,10 @@ public void openOtherApp(String packageName){
}
```
### 打开指定包名的App应用信息界面
### 打开指定包名的App应用信息界面
``` java
/**
* 打开指定包名的App应用信息界面
* 打开指定包名的App应用信息界面
*/
public void showAppInfo(String packageName) {
Intent intent = new Intent();
......@@ -95,10 +95,10 @@ public void showAppInfo(String packageName) {
}
```
### 分享Apk信息
### 分享Apk信息
``` java
/**
* 分享Apk信息
* 分享Apk信息
*/
public void shareApkInfo(String info) {
Intent intent = new Intent();
......@@ -110,73 +110,73 @@ public void shareApkInfo(String info) {
}
```
### 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)
### 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)
``` java
/**
* 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)
* 获取App信息的一个封装类(包名、版本号、应用信息、图标、名称等)
*/
public class AppEnging {
public static List<AppInfo> getAppInfos(Context context) {
List<AppInfo> list = new ArrayList<AppInfo>();
//获取应用程序信息
//包的管理者
//获取应用程序信息
//包的管理者
PackageManager pm = context.getPackageManager();
//获取系统中安装到所有软件信息
//获取系统中安装到所有软件信息
List<PackageInfo> installedPackages = pm.getInstalledPackages(0);
for (PackageInfo packageInfo : installedPackages) {
//获取包名
//获取包名
String packageName = packageInfo.packageName;
//获取版本号
//获取版本号
String versionName = packageInfo.versionName;
//获取application
//获取application
ApplicationInfo applicationInfo = packageInfo.applicationInfo;
int uid = applicationInfo.uid;
//获取应用程序的图标
//获取应用程序的图标
Drawable icon = applicationInfo.loadIcon(pm);
//获取应用程序的名称
//获取应用程序的名称
String name = applicationInfo.loadLabel(pm).toString();
//是否是用户程序
//获取应用程序中相关信息,是否是系统程序和是否安装到SD卡
//是否是用户程序
//获取应用程序中相关信息,是否是系统程序和是否安装到SD卡
boolean isUser;
int flags = applicationInfo.flags;
if ((applicationInfo.FLAG_SYSTEM & flags) == applicationInfo.FLAG_SYSTEM) {
//系统程序
//系统程序
isUser = false;
} else {
//用户程序
//用户程序
isUser = true;
}
//是否安装到SD卡
//是否安装到SD卡
boolean isSD;
if ((applicationInfo.FLAG_EXTERNAL_STORAGE & flags) == applicationInfo.FLAG_EXTERNAL_STORAGE) {
//安装到了SD卡
//安装到了SD卡
isSD = true;
} else {
//安装到手机中
//安装到手机中
isSD = false;
}
//添加到bean中
//添加到bean中
AppInfo appInfo = new AppInfo(name, icon, packageName, versionName, isSD, isUser);
//将bean存放到list集合
//将bean存放到list集合
list.add(appInfo);
}
return list;
}
}
// 封装软件信息的bean类
// 封装软件信息的bean类
class AppInfo {
//名称
//名称
private String name;
//图标
//图标
private Drawable icon;
//包名
//包名
private String packagName;
//版本号
//版本号
private String versionName;
//是否安装到SD卡
//是否安装到SD卡
private boolean isSD;
//是否是用户程序
//是否是用户程序
private boolean isUser;
public AppInfo() {
......@@ -196,12 +196,12 @@ class AppInfo {
}
```
### 判断当前App处于前台还是后台
### 判断当前App处于前台还是后台
``` java
// 需添加<uses-permission android:name="android.permission.GET_TASKS"/>
// 并且必须是系统应用该方法才有效
// 需添加<uses-permission android:name="android.permission.GET_TASKS"/>
// 并且必须是系统应用该方法才有效
/**
* 判断当前App处于前台还是后台
* 判断当前App处于前台还是后台
*/
public static boolean isApplicationBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
......
# 解密相关
### MD5加密
# 加解密相关
### MD5加密
``` java
/**
* MD5加密
* MD5加密
*/
public static String encryptMD5(String data) throws Exception {
MessageDigest md5 = MessageDigest.getInstance("MD5");
......@@ -10,10 +10,10 @@ public static String encryptMD5(String data) throws Exception {
}
```
### SHA加密
### SHA加密
```
/**
* SHA加密
* SHA加密
*/
public static String encryptSHA(String data) throws Exception {
MessageDigest sha = MessageDigest.getInstance("SHA");
......
# 键盘相关
### 避免输入法面板遮挡
# 键盘相关
### 避免输入法面板遮挡
``` java
// 在manifest.xml中activity中设置
// 在manifest.xml中activity中设置
android:windowSoftInputMode="stateVisible|adjustResize"
```
### 动态隐藏软键盘
### 动态隐藏软键盘
``` java
/**
* 动态隐藏软键盘
* 动态隐藏软键盘
*/
public static void hideSoftInput(Activity activity) {
View view = activity.getWindow().peekDecorView();
......@@ -20,7 +20,7 @@ public static void hideSoftInput(Activity activity) {
}
/**
* 动态隐藏软键盘
* 动态隐藏软键盘
*/
public static void hideSoftInput(Context context, EditText edit) {
edit.clearFocus();
......@@ -30,11 +30,11 @@ public static void hideSoftInput(Context context, EditText edit) {
}
```
### 点击屏幕空白区域隐藏软键盘
### 点击屏幕空白区域隐藏软键盘
``` java
// 方法1:在onTouch中处理,未获焦点则隐藏
// 方法1:在onTouch中处理,未获焦点则隐藏
/**
* 在onTouch中处理,未获焦点则隐藏
* 在onTouch中处理,未获焦点则隐藏
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
......@@ -45,7 +45,7 @@ public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
// 方法2:根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,需重写dispatchTouchEvent
// 方法2:根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,需重写dispatchTouchEvent
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
......@@ -58,7 +58,7 @@ public boolean dispatchTouchEvent(MotionEvent ev) {
}
/**
* 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘
* 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘
*/
private boolean isShouldHideKeyboard(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
......@@ -75,7 +75,7 @@ private boolean isShouldHideKeyboard(View v, MotionEvent event) {
}
/**
* 获取InputMethodManager,隐藏软键盘
* 获取InputMethodManager,隐藏软键盘
*/
private void hideKeyboard(IBinder token) {
if (token != null) {
......@@ -85,10 +85,10 @@ private void hideKeyboard(IBinder token) {
}
```
### 动态显示软键盘
### 动态显示软键盘
``` java
/**
* 动态显示软键盘
* 动态显示软键盘
*/
public static void showSoftInput(Context context, EditText edit) {
edit.setFocusable(true);
......@@ -100,10 +100,10 @@ public static void showSoftInput(Context context, EditText edit) {
}
```
### 切换键盘显示与否状态
### 切换键盘显示与否状态
``` java
/**
* 切换键盘显示与否状态
* 切换键盘显示与否状态
*/
public static void toggleSoftInput(Context context, EditText edit) {
edit.setFocusable(true);
......
# 网络相关
### 打开网络设置界面
# 网络相关
### 打开网络设置界面
``` java
/**
* 打开网络设置界面
* 打开网络设置界面
*/
public static void openSetting(Activity activity) {
Intent intent = new Intent("/");
......@@ -14,10 +14,10 @@ public static void openSetting(Activity activity) {
}
```
### 判断是否网络连接
### 判断是否网络连接
``` java
/**
* 判断是否网络连接
* 判断是否网络连接
*/
public static boolean isOnline(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
......@@ -30,10 +30,10 @@ public static boolean isOnline(Context context) {
}
```
### 判断wifi是否连接状态
### 判断wifi是否连接状态
``` java
/**
* 判断wifi是否连接状态
* 判断wifi是否连接状态
*/
public static boolean isWifi(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
......@@ -42,10 +42,10 @@ public static boolean isWifi(Context context) {
}
```
### 获取移动网络运营商名称,如中国联通、中国移动、中国电信
### 获取移动网络运营商名称,如中国联通、中国移动、中国电信
``` java
/**
* 获取移动网络运营商名称,如中国联通、中国移动、中国电信
* 获取移动网络运营商名称,如中国联通、中国移动、中国电信
*/
public static String getNetworkOperatorName(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
......@@ -54,14 +54,14 @@ public static String getNetworkOperatorName(Context context) {
}
```
### 返回移动终端类型
### 返回移动终端类型
``` java
// PHONE_TYPE_NONE :0 手机制式未知
// PHONE_TYPE_GSM :1 手机制式为GSM,移动和联通
// PHONE_TYPE_CDMA :2 手机制式为CDMA,电信
// PHONE_TYPE_NONE :0 手机制式未知
// PHONE_TYPE_GSM :1 手机制式为GSM,移动和联通
// PHONE_TYPE_CDMA :2 手机制式为CDMA,电信
// PHONE_TYPE_SIP:3
/**
* 返回移动终端类型
* 返回移动终端类型
*/
public static int getPhoneType(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
......@@ -70,9 +70,9 @@ public static int getPhoneType(Context context) {
}
```
### 判断手机连接的网络类型(2G,3G,4G)
### 判断手机连接的网络类型(2G,3G,4G)
``` java
// 联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO
// 联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO
public class Constants {
/**
* Unknown network class
......@@ -96,7 +96,7 @@ public class Constants {
public static final int NETWORK_CLASS_4_G = 4;
}
/**
* 判断手机连接的网络类型(2G,3G,4G)
* 判断手机连接的网络类型(2G,3G,4G)
*/
public static int getNetWorkClass(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
......@@ -126,10 +126,10 @@ public static int getNetWorkClass(Context context) {
}
```
### 判断当前手机的网络类型(WIFI还是2,3,4G)
### 判断当前手机的网络类型(WIFI还是2,3,4G)
``` java
/**
* 判断当前手机的网络类型(WIFI还是2,3,4G),需要用到上面的方法
* 判断当前手机的网络类型(WIFI还是2,3,4G),需要用到上面的方法
*/
public static int getNetWorkStatus(Context context) {
int netWorkType = Constants.NETWORK_CLASS_UNKNOWN;
......
# 手机相关
### 判断设备是否是手机
# 手机相关
### 判断设备是否是手机
``` java
/**
* 判断设备是否是手机
* 判断设备是否是手机
*/
public static boolean isPhone(Context context) {
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
......@@ -10,10 +10,10 @@ public static boolean isPhone(Context context) {
}
```
### 获取当前设备的IMIE,需与上面的isPhone一起使用
### 获取当前设备的IMIE,需与上面的isPhone一起使用
``` java
/**
* 获取当前设备的IMIE,需与上面的isPhone一起使用
* 获取当前设备的IMIE,需与上面的isPhone一起使用
*/
public static String getDeviceIMEI(Context context) {
String deviceId;
......@@ -27,24 +27,24 @@ public static String getDeviceIMEI(Context context) {
}
```
### 获取手机状态信息
### 获取手机状态信息
``` java
// 需添加权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
// 需添加权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
/**
* 获取手机状态信息
* 获取手机状态信息
*
* 返回如下
* 返回如下
* DeviceId(IMEI) = 99000311726612
* DeviceSoftwareVersion = 00
* Line1Number =
* NetworkCountryIso = cn
* NetworkOperator = 46003
* NetworkOperatorName = 中国电信
* NetworkOperatorName = 中国电信
* NetworkType = 6
* honeType = 2
* SimCountryIso = cn
* SimOperator = 46003
* SimOperatorName = 中国电信
* SimOperatorName = 中国电信
* SimSerialNumber = 89860315045710604022
* SimState = 5
* SubscriberId(IMSI) = 460030419724900
......@@ -73,21 +73,21 @@ public static String getPhoneStatus(Context context) {
}
```
### 是否有SD卡
### 是否有SD卡
``` java
/**
* 是否有SD卡
* 是否有SD卡
*/
public static boolean haveSDCard() {
return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}
```
### 获取MAC地址
### 获取MAC地址
``` java
// 需添加权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
// 需添加权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
/**
* 获取MAC地址
* 获取MAC地址
*/
public static String getMacAddress(Context context) {
String macAddress;
......@@ -103,10 +103,10 @@ public static String getMacAddress(Context context) {
}
```
### 获取手机厂商,如Xiaomi
### 获取手机厂商,如Xiaomi
``` java
/**
* 获取手机厂商,如Xiaomi
* 获取手机厂商,如Xiaomi
*/
public static String getOsName() {
String MANUFACTURER = Build.MANUFACTURER;
......@@ -114,10 +114,10 @@ public static String getOsName() {
}
```
### 获取手机型号,如MI2SC
### 获取手机型号,如MI2SC
``` java
/**
* 获取手机型号,如MI2SC
* 获取手机型号,如MI2SC
*/
private String getModel() {
String model = android.os.Build.MODEL;
......@@ -130,30 +130,30 @@ private String getModel() {
}
```
### 跳转至拨号界面
### 跳转至拨号界面
``` java
/**
* 跳转至拨号界面
* 跳转至拨号界面
*/
public static void callDial(Context context, String phoneNumber) {
context.startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber)));
}
```
### 拨打电话
### 拨打电话
``` java
/**
* 拨打电话
* 拨打电话
*/
public static void call(Context context, String phoneNumber) {
context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)));
}
```
### 发送短信
### 发送短信
``` java
/**
* 发送短信
* 发送短信
*/
public static void sendSms(Context context, String phoneNumber, String content) {
Uri uri = Uri.parse("smsto:" + (TextUtils.isEmpty(phoneNumber) ? "" : phoneNumber));
......@@ -163,72 +163,72 @@ public static void sendSms(Context context, String phoneNumber, String content)
}
```
### 获取手机联系人
### 获取手机联系人
``` java
/**
* 获取手机联系人
* 获取手机联系人
*/
public static List<HashMap<String, String>> getAllContactInfo(Context context) {
SystemClock.sleep(3000);
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
// 1.获取内容解析者
// 1.获取内容解析者
ContentResolver resolver = context.getContentResolver();
// 2.获取内容提供者的地址:com.android.contacts
// raw_contacts表的地址 :raw_contacts
// view_data表的地址 : data
// 3.生成查询地址
// 2.获取内容提供者的地址:com.android.contacts
// raw_contacts表的地址 :raw_contacts
// view_data表的地址 : data
// 3.生成查询地址
Uri raw_uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri date_uri = Uri.parse("content://com.android.contacts/data");
// 4.查询操作,先查询raw_contacts,查询contact_id
// projection : 查询的字段
// 4.查询操作,先查询raw_contacts,查询contact_id
// projection : 查询的字段
Cursor cursor = resolver.query(raw_uri, new String[] { "contact_id" },
null, null, null);
// 5.解析cursor
// 5.解析cursor
while (cursor.moveToNext()) {
// 6.获取查询的数据
// 6.获取查询的数据
String contact_id = cursor.getString(0);
// cursor.getString(cursor.getColumnIndex("contact_id"));//getColumnIndex
// : 查询字段在cursor中索引值,一般都是用在查询字段比较多的时候
// 判断contact_id是否为空
// : 查询字段在cursor中索引值,一般都是用在查询字段比较多的时候
// 判断contact_id是否为空
if (!TextUtils.isEmpty(contact_id)) {//null ""
// 7.根据contact_id查询view_data表中的数据
// selection : 查询条件
// selectionArgs :查询条件的参数
// sortOrder : 排序
// 空指针: 1.null.方法 2.参数为null
// 7.根据contact_id查询view_data表中的数据
// selection : 查询条件
// selectionArgs :查询条件的参数
// sortOrder : 排序
// 空指针: 1.null.方法 2.参数为null
Cursor c = resolver.query(date_uri, new String[] { "data1",
"mimetype" }, "raw_contact_id=?",
new String[] { contact_id }, null);
HashMap<String, String> map = new HashMap<String, String>();
// 8.解析c
// 8.解析c
while (c.moveToNext()) {
// 9.获取数据
// 9.获取数据
String data1 = c.getString(0);
String mimetype = c.getString(1);
// 10.根据类型去判断获取的data1数据并保存
// 10.根据类型去判断获取的data1数据并保存
if (mimetype.equals("vnd.android.cursor.item/phone_v2")) {
// 电话
// 电话
map.put("phone", data1);
} else if (mimetype.equals("vnd.android.cursor.item/name")) {
// 姓名
// 姓名
map.put("name", data1);
}
}
// 11.添加到集合中数据
// 11.添加到集合中数据
list.add(map);
// 12.关闭cursor
// 12.关闭cursor
c.close();
}
}
// 12.关闭cursor
// 12.关闭cursor
cursor.close();
return list;
}
```
### 直接打开手机联系人界面,并获取联系人号码
### 直接打开手机联系人界面,并获取联系人号码
``` java
// 在按钮点击事件中设置Intent,
// 在按钮点击事件中设置Intent,
Intent intent = new Intent();
intent.setAction("android.intent.action.PICK");
intent.addCategory("android.intent.category.DEFAULT");
......@@ -240,7 +240,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data != null) {
Uri uri = data.getData();
String num = null;
// 创建内容解析者
// 创建内容解析者
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(uri,
null, null, null, null);
......@@ -248,53 +248,53 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
num = cursor.getString(cursor.getColumnIndex("data1"));
}
cursor.close();
num = num.replaceAll("-", "");//替换的操作,555-6 -> 5556
num = num.replaceAll("-", "");//替换的操作,555-6 -> 5556
}
}
```
### 获取手机短信并保存到xml中
### 获取手机短信并保存到xml中
``` java
/**
* 获取手机短信并保存到xml中
* 获取手机短信并保存到xml中
*/
public static void getAllSMS(Context context) {
//1.获取短信
//1.1获取内容解析者
//1.获取短信
//1.1获取内容解析者
ContentResolver resolver = context.getContentResolver();
//1.2获取内容提供者地址 sms,sms表的地址:null 不写
//1.3获取查询路径
//1.2获取内容提供者地址 sms,sms表的地址:null 不写
//1.3获取查询路径
Uri uri = Uri.parse("content://sms");
//1.4.查询操作
//projection : 查询的字段
//selection : 查询的条件
//selectionArgs : 查询条件的参数
//sortOrder : 排序
//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序列器
//设置最大进度
int count = cursor.getCount();//获取短信的个数
//2.备份短信
//2.1获取xml序列器
XmlSerializer xmlSerializer = Xml.newSerializer();
try {
//2.2设置xml文件保存的路径
//os : 保存的位置
//encoding : 编码格式
//2.2设置xml文件保存的路径
//os : 保存的位置
//encoding : 编码格式
xmlSerializer.setOutput(new FileOutputStream(new File("/mnt/sdcard/backupsms.xml")), "utf-8");
//2.3设置头信息
//standalone : 是否独立保存
//2.3设置头信息
//standalone : 是否独立保存
xmlSerializer.startDocument("utf-8", true);
//2.4设置根标签
//2.4设置根标签
xmlSerializer.startTag(null, "smss");
//1.5.解析cursor
//1.5.解析cursor
while (cursor.moveToNext()) {
SystemClock.sleep(1000);
//2.5设置短信的标签
//2.5设置短信的标签
xmlSerializer.startTag(null, "sms");
//2.6设置文本内容的标签
//2.6设置文本内容的标签
xmlSerializer.startTag(null, "address");
String address = cursor.getString(0);
//2.7设置文本内容
//2.7设置文本内容
xmlSerializer.text(address);
xmlSerializer.endTag(null, "address");
xmlSerializer.startTag(null, "date");
......@@ -314,7 +314,7 @@ public static void getAllSMS(Context context) {
}
xmlSerializer.endTag(null, "smss");
xmlSerializer.endDocument();
//2.8将数据刷新到文件中
//2.8将数据刷新到文件中
xmlSerializer.flush();
} catch (Exception e) {
// TODO Auto-generated catch block
......
# 正则相关
### 正则工具类
# 正则相关
### 正则工具类
``` java
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
//验证座机号,正确格式: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
//验证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位
//验证用户名,取值范围为a-z,A-Z,0-9,"_",汉字,不能以"_"结尾,用户名必须是6-20位
private static final String REGEX_USERNAME = "^[\\w\\u4e00-\\u9fa5]{6,20}(?<!_)$";
//验证IP地址
//验证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 是否符合手机号格式
* @param string 待验证文本
* @return 是否符合手机号格式
*/
public static boolean isMobile(String string) {
return isMatch(REGEX_MOBILE, string);
}
/**
* @param string 待验证文本
* @return 是否符合座机号码格式
* @param string 待验证文本
* @return 是否符合座机号码格式
*/
public static boolean isTel(String string) {
return isMatch(REGEX_TEL, string);
}
/**
* @param string 待验证文本
* @return 是否符合邮箱格式
* @param string 待验证文本
* @return 是否符合邮箱格式
*/
public static boolean isEmail(String string) {
return isMatch(REGEX_EMAIL, string);
}
/**
* @param string 待验证文本
* @return 是否符合网址格式
* @param string 待验证文本
* @return 是否符合网址格式
*/
public static boolean isURL(String string) {
return isMatch(REGEX_URL, string);
}
/**
* @param string 待验证文本
* @return 是否符合汉字
* @param string 待验证文本
* @return 是否符合汉字
*/
public static boolean isChz(String string) {
return isMatch(REGEX_CHZ, string);
}
/**
* @param string 待验证文本
* @return 是否符合用户名
* @param string 待验证文本
* @return 是否符合用户名
*/
public static boolean isUsername(String string) {
return isMatch(REGEX_USERNAME, string);
}
/**
* @param regex 正则表达式字符串
* @param string 要匹配的字符串
* @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
* @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);
......
# 屏幕相关
### 获取手机分辨率
# 屏幕相关
### 获取手机分辨率
``` java
/**
* 获取屏幕的宽度px
* 获取屏幕的宽度px
*/
public static int getDeviceWidth(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸
windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高
DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸
windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高
return outMetrics.widthPixels;
}
/**
* 获取屏幕的高度px
* 获取屏幕的高度px
*/
public static int getDeviceHeight(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸
windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高
DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸
windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高
return outMetrics.heightPixels;
}
```
### 获取状态栏高度
### 获取状态栏高度
```
/**
* 获取状态栏高度
* 获取状态栏高度
*/
public int getStatusBarHeight() {
int result = 0;
......@@ -37,20 +37,20 @@ public int getStatusBarHeight() {
}
```
### 获取状态栏高度+标题栏(ActionBar)高度
### 获取状态栏高度+标题栏(ActionBar)高度
``` java
/**
* 获取状态栏高度+标题栏(ActionBar)高度
* 获取状态栏高度+标题栏(ActionBar)高度
*/
public static int getTopBarHeight(Activity activity) {
return activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
}
```
### 获取屏幕截图
### 获取屏幕截图
``` java
/**
* 获取当前屏幕截图,包含状态栏
* 获取当前屏幕截图,包含状态栏
*/
public static Bitmap snapShotWithStatusBar(Activity activity) {
View view = activity.getWindow().getDecorView();
......@@ -66,7 +66,7 @@ public static Bitmap snapShotWithStatusBar(Activity activity) {
}
/**
* 获取当前屏幕截图,不包含状态栏
* 获取当前屏幕截图,不包含状态栏
*/
public static Bitmap snapShotWithoutStatusBar(Activity activity) {
View view = activity.getWindow().getDecorView();
......@@ -86,16 +86,16 @@ public static Bitmap snapShotWithoutStatusBar(Activity activity) {
}
```
### 设置透明状态栏,需在setContentView之前调用
### 设置透明状态栏,需在setContentView之前调用
``` java
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
// 需在顶部控件布局中加入以下属性让内容出现在状态栏之下
// 需在顶部控件布局中加入以下属性让内容出现在状态栏之下
android:clipToPadding="true"
android:fitsSystemWindows="true"
```
# 尺寸相关
### dp与px转换
# 尺寸相关
### dp与px转换
``` java
/**
* dp转px
* dp转px
*/
public static int dp2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
......@@ -10,7 +10,7 @@ public static int dp2px(Context context, float dpValue) {
}
/**
* px转dp
* px转dp
*/
public static int px2dp(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
......@@ -18,10 +18,10 @@ public static int px2dp(Context context, float pxValue) {
}
```
### sp与px转换
### sp与px转换
``` java
/**
* sp转px
* sp转px
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
......@@ -29,7 +29,7 @@ public static int sp2px(Context context, float spValue) {
}
/**
* px转sp
* px转sp
*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
......@@ -37,11 +37,11 @@ public static int px2sp(Context context, float pxValue) {
}
```
### 各种单位转换
### 各种单位转换
``` java
// 该方法存在于TypedValue
// 该方法存在于TypedValue
/**
* 各种单位转换
* 各种单位转换
*/
public static float applyDimension(int unit, float value, DisplayMetrics metrics) {
switch (unit) {
......@@ -62,10 +62,10 @@ public static float applyDimension(int unit, float value, DisplayMetrics metrics
}
```
### 在onCreate()即可获取View的宽高
### 在onCreate()即可获取View的宽高
``` java
/**
* 在onCreate()即可获取View的宽高
* 在onCreate()即可获取View的宽高
*/
public static int[] getViewMeasure(View view) {
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
......@@ -75,11 +75,11 @@ public static int[] getViewMeasure(View view) {
}
```
### ListView中提前测量View尺寸
### ListView中提前测量View尺寸
``` java
// 通知父布局,占用的宽,高;
// 通知父布局,占用的宽,高;
/**
* ListView中提前测量View尺寸,如headerView
* ListView中提前测量View尺寸,如headerView
*/
private void measureView(View view) {
ViewGroup.LayoutParams p = view.getLayoutParams();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册