项目实战工具类(一):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 条评论
登录 后参与评论

相关文章

来自专栏向治洪

nfc近场通信

NFC简介: Near Field Communication 近场通信,是一种数据传输技术。 与wifi、蓝牙、红外线等数据传输技术的一个主要差异就是有...

2899
来自专栏潇涧技术专栏

Head First Android SwipeRefreshLayout

本文内容和代码参考自Implementing Swipe to Refresh, an Android Material Design UI Pattern,原...

822
来自专栏上善若水

037android初级篇之Activity的几个重要函数

手机屏幕事件的处理方法onTouchEvent。该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件...

802
来自专栏分享达人秀

完善RecyclerView,添加首尾视图

在之前学习ListView的时候,有学习过如何给ListView添加列表头和列表尾。但是通过近几期的学习,发现RecyclerView是一个比ListV...

1938
来自专栏代码GG之家

android常用接口(二)

=图片========================== bitmap转Byte数组(微信分享就需要用到) public byte[] bmpToByteAr...

1898
来自专栏Sorrower的专栏

Android小知识10则(上)(2018.8重编版)

683
来自专栏7号代码

Android网络与数据存储——SharedPreferences(实现是否开启引导界面)

SharedPreferences保存的数据主要是简单类型的key-value对。

1318
来自专栏Java学习网

Android扫描多媒体文件剖析

Android扫描多媒体文件剖析 这篇文章从系统源代码分析,讲述如何将程序创建的多媒体文件加入系统的媒体库,如何从媒体库删除,以及大多数程序开发者经常遇到的无...

2328
来自专栏上善若水

027android初级篇之Intent相关介绍

在Android中提供了Intent机制来协助Android应用间,组件间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,...

652
来自专栏分享达人秀

Intent 属性详解(下)

上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动。 四、Data和Type属性 Dat...

2065

扫码关注云+社区