项目实战工具类(一):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 }

(转载)项目实战工具类(一):PhoneUtil(手机信息相关)的更多相关文章

  1. 项目实战工具类(一):PhoneUtil(手机信息相关)

    可以使用的功能: 1.获取手机系统版本号 2.获取手机型号 3.获取手机宽度 4.获取手机高度 5.获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID. 6.获取手机sim卡 ...

  2. 项目实战工具类(二):ZipUtils(压缩/解压缩文件相关)

    import android.content.Context; import android.util.Log; import java.io.File; import java.io.FileInp ...

  3. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

  4. 【转载】C#工具类:人民币金额转换为中文大写

    在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额.现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换 ...

  5. 【转载】C#工具类:Json操作帮助类

    Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...

  6. 【转载】 C#工具类:Csv文件转换类

    CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...

  7. 【转载】C#工具类:FTP操作辅助类FTPHelper

    FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.可以通过C#中的FtpWebRequest类.NetworkCredential类.We ...

  8. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  9. Spring统一返回Json工具类,带分页信息

    前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...

随机推荐

  1. 在Maven中引入spring的DAO、DOMAIN、CONTROLLER、VIEW

    除了mysql外麻雀虽小,五脏俱全. 参照之前的博客建立好的maven项目如图. 第一步 : 向maven项目中的pom文件添加依赖 ,然后maven install

  2. .NET Core 开发:永远的Hello Word

    从.NET Core发布到现在已经很长一段时间了,园子里的各路大神也和它打的火热,本着与时俱进,啥火学啥的原则,我也开始了我的.NET Core学习之旅. 简介 .NET从2002年发行到现在,从呱呱 ...

  3. Spark RDD概念学习系列之不同角度看RDD

    不多说,直接上干货!

  4. SQL--left join ,inner join, right jion, Limit

    SQL Limit 语句 用于返回规定的数量记录.当数据库中的数据量十分庞大时,可以使用,返回指定的数量记录. 语句如:select * from grade limit 5.返回grade表中的前面 ...

  5. Stack Overflow大揭密:哪一种程序员工资最高?

    Stackoverflow在程序员之间可以說是无人不知无人不晓,甚至常有人开玩笑说:“如果stackoverflow倒闭了,全世界代码的产出率将下降一半以上”或许听起来有点夸张,但是不难想像这个网站在 ...

  6. 深入剖析 iOS 性能优化

    问题种类 时间复杂度 在集合里数据量小的情况下时间复杂度对于性能的影响看起来微乎其微.但如果某个开发的功能是一个公共功能,无法预料调用者传入数据的量时,这个复杂度的优化显得非常重要了.上图列出了各种情 ...

  7. div+css布局自适应小结

    一.两栏布局(左定宽,右自动)1. float + margin即固定宽度元素设置float属性为left,自适应元素设置margin属性,margin-left应>=定宽元素宽度.举例: &l ...

  8. 路飞学城Python-Day24

    12.粘包现象 客户端接收的信息指定了的字节,TCP协议没有丢失协议,只是只能接收指定的字节数,于是产生出了粘包现象 服务端接收命令只能接收1024字节,服务端执行命令结果以后传输给客户端,客户端再以 ...

  9. BZOJ 2119 股市的预测 (后缀数组+RMQ)

    题目大意:求一个字符串中形如$ABA$的串的数量,其中$B$的长度是给定的 有点像[NOI2016]优秀的拆分这道题 先对序列打差分,然后离散,再正反跑$SA$,跑出$st$表 进入正题 $ABA$串 ...

  10. [USACO18OPEN] Multiplayer Moo (并查集+维护并查集技巧)

    题目大意:给你一个N*N的棋盘,棋盘上每个点都有一个权值 第一问求一个权值形成的最大联通块中点的数量 第一问求两个权值共同形成的最大联通块中点的数量 提供一种并查集的做法:(感谢大佬们的题解)第一问把 ...