项目实战工具类(一):PhoneUtil(手机信息相关)
可以使用的功能:
1、获取手机系统版本号
2、获取手机型号
3、获取手机宽度
4、获取手机高度
5、获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID.
6、获取手机sim卡号
7、获取手机号
8、判断sd卡是否挂载
9、获取sd卡剩余空间的大小
10、获取sd卡空间的总大小
11、判断是否是平板
12、判断一个apk是否安装
13、拨打电话
14、打开网页
15、获取应用权限 名称列表
16、获取手机内安装的应用
17、获取手机安装非系统应用
18、获取安装应用的信息
19、打开指定包名的应用
20、卸载指定包名的应用
21、手机号判断
工具类:
1 import java.io.File;
2 import java.util.ArrayList;
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
8
9 import android.content.Context;
10 import android.content.Intent;
11 import android.content.pm.ApplicationInfo;
12 import android.content.pm.PackageInfo;
13 import android.content.pm.PackageManager;
14 import android.content.pm.PackageManager.NameNotFoundException;
15 import android.content.pm.PermissionGroupInfo;
16 import android.content.pm.PermissionInfo;
17 import android.content.pm.ResolveInfo;
18 import android.content.res.Configuration;
19 import android.net.Uri;
20 import android.os.Environment;
21 import android.os.StatFs;
22 import android.telephony.TelephonyManager;
23 import android.util.TypedValue;
24 import android.view.WindowManager;
25
26 public class PhoneUtil {
27 private static PhoneUtil phoneUtil;
28
29 public static PhoneUtil getInstance() {
30 if (phoneUtil == null) {
31 synchronized (PhoneUtil.class) {
32 if (phoneUtil == null) {
33 phoneUtil = new PhoneUtil();
34 }
35 }
36 }
37 return phoneUtil;
38 }
39
40 /**
41 * 获取手机系统版本号
42 *
43 * @return
44 */
45 public int getSDKVersionNumber() {
46 int sdkVersion;
47 try {
48 sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK_INT);
49 } catch (NumberFormatException e) {
50 e.printStackTrace();
51 sdkVersion = 0;
52 }
53 return sdkVersion;
54 }
55
56 /**
57 * 获取手机型号
58 */
59 public String getPhoneModel() {
60 return android.os.Build.MODEL;
61 }
62
63 /**
64 * 获取手机宽度
65 */
66 @SuppressWarnings("deprecation")
67 public int getPhoneWidth(Context context) {
68 WindowManager wm = (WindowManager) context
69 .getSystemService(Context.WINDOW_SERVICE);
70 return wm.getDefaultDisplay().getWidth();
71 }
72
73 /**
74 * 获取手机高度
75 *
76 * @param context
77 */
78 @SuppressWarnings("deprecation")
79 public int getPhoneHeight(Context context) {
80 WindowManager wm = (WindowManager) context
81 .getSystemService(Context.WINDOW_SERVICE);
82 return wm.getDefaultDisplay().getHeight();
83 }
84
85 /**
86 * 获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID.
87 *
88 * @param context
89 */
90 public String getPhoneImei(Context context) {
91 TelephonyManager tm = (TelephonyManager) context
92 .getSystemService(Context.TELEPHONY_SERVICE);
93 if (tm == null)
94 return null;
95 return tm.getDeviceId();
96 }
97
98 /**
99 * 获取手机sim卡号
100 *
101 * @param context
102 */
103 public String getPhoneSim(Context context) {
104 TelephonyManager tm = (TelephonyManager) context
105 .getSystemService(Context.TELEPHONY_SERVICE);
106 if (tm == null)
107 return null;
108 return tm.getSubscriberId();
109 }
110
111 /**
112 * 获取手机号
113 *
114 * @param context
115 */
116 public String getPhoneNum(Context context) {
117 TelephonyManager tm = (TelephonyManager) context
118 .getSystemService(Context.TELEPHONY_SERVICE);
119 if (tm == null)
120 return null;
121 return tm.getLine1Number();
122 }
123
124 /**
125 * 判断sd卡是否挂载
126 */
127 public boolean isSDCardMount() {
128 if (android.os.Environment.getExternalStorageState().equals(
129 android.os.Environment.MEDIA_MOUNTED)) {
130 return true;
131 } else {
132 return false;
133 }
134 }
135
136 /**
137 * 获取sd卡剩余空间的大小
138 */
139 @SuppressWarnings("deprecation")
140 public long getSDFreeSize() {
141 File path = Environment.getExternalStorageDirectory(); // 取得SD卡文件路径
142 StatFs sf = new StatFs(path.getPath());
143 long blockSize = sf.getBlockSize(); // 获取单个数据块的大小(Byte)
144 long freeBlocks = sf.getAvailableBlocks();// 空闲的数据块的数量
145 // 返回SD卡空闲大小
146 return (freeBlocks * blockSize) / 1024 / 1024; // 单位MB
147 }
148
149 /**
150 * 获取sd卡空间的总大小
151 */
152 @SuppressWarnings("deprecation")
153 public long getSDAllSize() {
154 File path = Environment.getExternalStorageDirectory(); // 取得SD卡文件路径
155 StatFs sf = new StatFs(path.getPath());
156 long blockSize = sf.getBlockSize(); // 获取单个数据块的大小(Byte)
157 long allBlocks = sf.getBlockCount(); // 获取所有数据块数
158 // 返回SD卡大小
159 return (allBlocks * blockSize) / 1024 / 1024; // 单位MB
160 }
161
162 /**
163 * 判断是否是平板
164 */
165 public boolean isTablet(Context context) {
166 return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
167 }
168
169 /**
170 * 判断一个apk是否安装
171 *
172 * @param context
173 * @param packageName
174 */
175 public boolean isApkInstalled(Context context, String packageName) {
176 PackageManager pm = context.getPackageManager();
177 try {
178 pm.getPackageInfo(packageName, 0);
179 } catch (PackageManager.NameNotFoundException e) {
180 return false;
181 }
182 return true;
183 }
184
185 /**
186 * 拨打电话
187 *
188 * @param context
189 * @param phoneNum
190 */
191 public void call(Context context, String phoneNum) throws Exception {
192 if (phoneNum != null && !phoneNum.equals("")) {
193 Uri uri = Uri.parse("tel:" + phoneNum);
194 Intent intent = new Intent(Intent.ACTION_DIAL, uri);
195 context.startActivity(intent);
196 }
197 }
198
199 /**
200 * 打开网页
201 */
202 public void openWeb(Context context, String url) {
203 try {
204 Uri uri = Uri.parse(url);
205 context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
206 } catch (Exception e) {
207 e.printStackTrace();
208 }
209 }
210
211 /**
212 * 获取应用权限 名称列表
213 */
214 public String[] getAppPermissions(Context context)
215 throws NameNotFoundException {
216 PackageManager pm = context.getPackageManager();
217 PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(),
218 PackageManager.GET_PERMISSIONS);
219 return getAppPermissions(packageInfo);
220 }
221
222 public String[] getAppPermissions(PackageInfo packageInfo)
223 throws NameNotFoundException {
224 return packageInfo.requestedPermissions;
225 }
226
227 /**
228 * 获取手机内安装的应用
229 */
230 public List<PackageInfo> getInstalledApp(Context context) {
231 PackageManager pm = context.getPackageManager();
232 return pm.getInstalledPackages(0);
233 }
234
235 /**
236 * 获取手机安装非系统应用
237 */
238 @SuppressWarnings("static-access")
239 public List<PackageInfo> getUserInstalledApp(Context context) {
240 List<PackageInfo> infos = getInstalledApp(context);
241 List<PackageInfo> apps = new ArrayList<PackageInfo>();
242 for (PackageInfo info : infos) {
243 if ((info.applicationInfo.flags & info.applicationInfo.FLAG_SYSTEM) <= 0) {
244 apps.add(info);
245 }
246 }
247 infos.clear();
248 infos = null;
249 return apps;
250 }
251
252 /**
253 * 获取安装应用的信息
254 */
255 public Map<String, Object> getInstalledAppInfo(Context context,
256 PackageInfo info) {
257 Map<String, Object> appInfos = new HashMap<String, Object>();
258 PackageManager pm = context.getPackageManager();
259 ApplicationInfo aif = info.applicationInfo;
260 appInfos.put("icon", pm.getApplicationIcon(aif));
261 appInfos.put("lable", pm.getApplicationLabel(aif));
262 appInfos.put("packageName", aif.packageName);
263 return appInfos;
264 }
265
266 /**
267 * 打开指定包名的应用
268 */
269 public void startAppPkg(Context context, String pkg) {
270 Intent startIntent = context.getPackageManager()
271 .getLaunchIntentForPackage(pkg);
272 startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
273 context.startActivity(startIntent);
274 }
275
276 /**
277 * 卸载指定包名的应用
278 */
279 public void unInstallApk(Context context, String packageName) {
280 Uri uri = Uri.parse("package:" + packageName);
281 Intent intent = new Intent(Intent.ACTION_DELETE);
282 intent.setData(uri);
283 context.startActivity(intent);
284 }
285
286 /**
287 * 手机号判断
288 */
289 public static boolean isMobileNO(String mobile) {
290 Pattern p = Pattern
291 .compile("^((145|147)|(15[^4])|(17[0-9])|((13|18)[0-9]))\\d{8}$");
292 Matcher m = p.matcher(mobile);
293 return m.matches();
294 }
295
296 }