Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mmm-rain
AndroidUtilCode
提交
119e2207
A
AndroidUtilCode
项目概览
mmm-rain
/
AndroidUtilCode
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
AndroidUtilCode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
119e2207
编写于
7月 31, 2016
作者:
B
blankj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify encode
上级
94ad8893
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
286 addition
and
286 deletion
+286
-286
README.md
README.md
+61
-61
about_app.md
about_app.md
+45
-45
about_encrypt.md
about_encrypt.md
+5
-5
about_keyboard.md
about_keyboard.md
+16
-16
about_net.md
about_net.md
+19
-19
about_phone.md
about_phone.md
+82
-82
about_regular.md
about_regular.md
+24
-24
about_screen.md
about_screen.md
+19
-19
about_size.md
about_size.md
+15
-15
未找到文件。
README.md
浏览文件 @
119e2207
# 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
-
卸载指定包名的A
pp
-
获取App名称
-
获取当前App版本号
-
打开指定包名的A
pp
-
打开指定包名的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地址
-
获取手机厂商,如Xiao
mi
-
获取手机型号,如MI2S
C
-
跳转至拨号界面
-
拨打电话
-
发送短信
-
获取手机联系人
-
直接打开手机联系人界面,并获取联系人号码
-
获取手机短信并保存到xml中
-
[
网络相关
](
https://github.com/Blankj/AndroidUtilCode/blob/master/about_net.md
)
-
打开网络设置界面
-
判断是否网络连接
-
判断wifi是否连接状态
-
获取移动网络运营商名称,如中国联通、中国移动、中国电信
-
返回移动终端类型
-
判断手机连接的网络类型(2G,3
G,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
)
-
正则工具类
-
[
加解密相关
](
h
ttps://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
about_app.md
浏览文件 @
119e2207
# 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) {
}
```
###
卸载指定包名的A
pp
###
卸载指定包名的App
```
java
/**
*
卸载指定包名的A
pp
*
卸载指定包名的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) {
}
```
###
打开指定包名的A
pp
###
打开指定包名的App
```
/**
*
打开指定包名的A
pp
*
打开指定包名的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
//
获取a
pplication
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
);
...
...
about_encrypt.md
浏览文件 @
119e2207
#
加
解密相关
### 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");
...
...
about_keyboard.md
浏览文件 @
119e2207
#
键盘相关
###
避免输入法面板遮挡
#
键盘相关
###
避免输入法面板遮挡
```
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所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,需重写dispatchTouchEve
nt
@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
);
...
...
about_net.md
浏览文件 @
119e2207
#
网络相关
###
打开网络设置界面
#
网络相关
###
打开网络设置界面
```
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,3
G,4G)
```
java
//
联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为E
VDO
//
联通的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,3
G,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
;
...
...
about_phone.md
浏览文件 @
119e2207
#
手机相关
###
判断设备是否是手机
#
手机相关
###
判断设备是否是手机
```
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"/>
//
需添加权限<u
ses-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"/>
//
需添加权限<u
ses-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
###
获取手机厂商,如Xiao
mi
```
java
/**
*
获取手机厂商,如
Xiaomi
*
获取手机厂商,如Xiao
mi
*/
public
static
String
getOsName
()
{
String
MANUFACTURER
=
Build
.
MANUFACTURER
;
...
...
@@ -114,10 +114,10 @@ public static String getOsName() {
}
```
###
获取手机型号,如
MI2SC
###
获取手机型号,如MI2S
C
```
java
/**
*
获取手机型号,如
MI2SC
*
获取手机型号,如MI2S
C
*/
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,查询cont
act_id
// projection :
查询的字段
Cursor
cursor
=
resolver
.
query
(
raw_uri
,
new
String
[]
{
"contact_id"
},
null
,
null
,
null
);
// 5.
解析
cursor
// 5.
解析c
ursor
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.参数为n
ull
// 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.
关闭c
ursor
c
.
close
();
}
}
// 12.
关闭
cursor
// 12.
关闭c
ursor
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
(
"-"
,
""
);
//
替换的操作,5
55-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.
解析c
ursor
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
...
...
about_regular.md
浏览文件 @
119e2207
#
正则相关
###
正则工具类
#
正则相关
###
正则工具类
```
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}$"
;
//
验证座机号,正确格式:x
xx/xxxx-xxxxxxx/xxxxxxxx
//
验证座机号,正确格式:xxx/x
xxx-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
//
验证u
rl
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
);
...
...
about_screen.md
浏览文件 @
119e2207
#
屏幕相关
###
获取手机分辨率
#
屏幕相关
###
获取手机分辨率
```
java
/**
*
获取屏幕的宽度p
x
*
获取屏幕的宽度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
;
}
/**
*
获取屏幕的高度p
x
*
获取屏幕的高度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"
```
about_size.md
浏览文件 @
119e2207
#
尺寸相关
### dp
与px转换
#
尺寸相关
### dp
与px转换
```
java
/**
* dp
转p
x
* dp
转p
x
*/
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
转d
p
* px
转d
p
*/
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
转p
x
* sp
转p
x
*/
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
转s
p
* px
转s
p
*/
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
//
该方法存在于Typ
edValue
/**
*
各种单位转换
*
各种单位转换
*/
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尺寸,如head
erView
*/
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录