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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android知识点总结

1--安卓多媒体之图片综合篇

712
来自专栏developerHaoz 的安卓之旅

Android 撸起袖子,自己封装 DialogFragment

DialogFragment 在 Android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity 的内容之上显示一个静态的对话框。...

1073
来自专栏潇涧技术专栏

Android Training Summary (1) Getting Started

Android Training 中Getting Started部分的阅读笔记

600
来自专栏Android常用基础

Dagger2-从入门到精通(下)

继上篇文章,这篇我们来学习Dagger2的高级用法。如果没看上篇文章的话最好先看下上篇文章再来学习本章,因为本章是接续上篇文章来写的,直接来看的话可能效果不是很...

4202
来自专栏刘望舒

打造一个灵活易用的Banner组件

之前做项目时候出于各种考虑,自己开发了Banner组件FBanner,欢迎大家的Star和PR。github上成熟的轮播图库已经有非常多了,比如banner和A...

1135
来自专栏Android-JessYan

我一行代码都不写实现Toolbar!你却还在封装BaseActivity?

原文地址: http://www.jianshu.com/p/75a5c24174b2 qq群:301733278

1254
来自专栏Flutter入门

Android平台硬件编码总结一

2022
来自专栏刘望舒

RxBinding使用和源码解析

作者 | juexingzhe 地址 | https://www.jianshu.com/u/ea71bb3770b4 声明 | 本文是 juexingzhe...

42610
来自专栏后端沉思录

BeanDefinitionRegistryPostProcessor

最近在看spring集成mybatis的代码,发现MapperScannerConfigurer实现了BeanDefinitionRegistryPostPro...

3252
来自专栏緣來來來

安卓基础干货(五):安卓线程与数据上传下载的学习

501

扫码关注云+社区