(轉載)項目實戰工具類(一):PhoneUtil(手機信息相關)

項目實戰工具類(一):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      * @return44      */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) context69                 .getSystemService(Context.WINDOW_SERVICE);70         return wm.getDefaultDisplay().getWidth();71     }72 73     /**74      * 獲取手機高度75      * 76      * @param context77      */78     @SuppressWarnings("deprecation")79     public int getPhoneHeight(Context context) {80         WindowManager wm = (WindowManager) context81                 .getSystemService(Context.WINDOW_SERVICE);82         return wm.getDefaultDisplay().getHeight();83     }84 85     /**86      * 獲取手機imei串號 ,GSM手機的 IMEI 和 CDMA手機的 MEID.87      * 88      * @param context89      */90     public String getPhoneImei(Context context) {91         TelephonyManager tm = (TelephonyManager) context92                 .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 }
復制代碼

轉載于:https://www.cnblogs.com/liupengfei005257/p/7448705.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253593.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手把手教你寫Linux I2C設備驅動

手把手教你寫Linux I2C設備驅動 標簽&#xff1a;Linux 設備 驅動 詳解 i2c 原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://ticktick.blog.51cto.com/823160/760020 Linux I2C驅動是嵌入…

HDR 成像技術學習(三)—— LOFIC

HDR 成像技術學習(一) HDR 成像技術學習(二) 我們拍攝的照片來自傳感器上的像素,它們將光處理為電信號,組合起來輸出畫面。當捕捉對象亮度過強,大量電荷擠在單個像素內,生成的圖像就會過曝。 LOFIC(Lateral Overflow Integration Capacitor,橫向溢出集合電容…

[模板]平面最近點對

實現 將平面內點按$x$坐標排序,分治$x$坐標,設$retmin(f(l,mid),f(mid1,r))$, 將$x\in[mid-ret,midret]$內的點按$y$坐標排序,算每個點與相鄰的$6$個點的距離找最優解即可. 時間復雜度:$O(nlogn)$. #define N 100005 #define INF 1e15 struct point{double x,y; }p[N]; inline …

人工智能與圖像傳感器

隨著人工智能時代的來臨,相應的芯片產品和行業也產生了相應的新方向。 在人工智能的各個分支中,機器視覺無疑是應用最廣泛的方向,它支撐著諸如人臉檢測、工業異常檢測、手勢識別等諸多重要的應用。顧名思義,機器視覺是使用機器學習/人工智能的方法來分析視覺信號,并且通過…

用戶空間訪問I2C設備驅動

2012-01-11 15:33:43標簽&#xff1a;Linux I2C 字符設備 設備驅動 用戶空間 原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://ticktick.blog.51cto.com/823160/761830 關于Linux下如何編…

097實戰 關于ETL的幾種運行方式

一&#xff1a;代碼部分 1.新建maven項目 2.添加需要的java代碼   3.書寫mapper類 4.書寫runner類 二&#xff1a;運行方式 1.本地運行 2.集群運行 3.本地提交集群運行 三&#xff1a;本地運行方式 1.解壓hadoop到本地 2.修改配置文件HADOOP_HOME 3.解壓common的壓縮包 4.將壓…

模擬ssh, hashlib模塊, struct模塊, subprocess模塊

一. 模擬ssh # 服務器端 import socket import subprocess # 系統操作server socket.socket()server.bind((127.0.0.1,8008))server.listen(5)while True:print("server is working.....")conn,addr server.accept()# 字節類型while True:# 針對window系統try:…

使用pssh進行并行批量操作

假如同時給上千臺服務器執行一個命令,拷貝一個文件,殺一個進程等,有什么簡化運維管理的工具呢?在小型使用中我都是使用for循 環,數量巨大,一方面不確定操作是否成功,一方面for循環語句性能不好估計且是不是同步并行執行.&#xff0c;這類工具比如 pdsh&#xff0c;mussh&#…

圖像清晰度評價函數

概述 圖像清晰度是用來指導調焦機構找到正焦位置的評價函數。理想的清晰度評價曲線如下圖所示,其中P 是評價函數最大值的位置,其對應正焦位置,P1 和P2 為正焦位置焦前和焦后采集到圖像的清晰度評價結果。 為了指導調焦機構找到正焦位置,清晰度曲線須具有以下特點: 單…

Linux下讀寫芯片的I2C寄存器

Linux下讀寫芯片的I2C寄存器 2012-01-10 11:40:18 標簽&#xff1a;Linux 寄存器 驅動 讀寫 I2C 原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://ticktick.blog.51cto.com/823160/76096…

列表和表格---學習筆記02

第7章 列表和表格 7.1 有序列表<ol type"A"><li>這里是第1個li</li><li>這里是第2個li</li><li>這里是第3個li</li></ol> ol屬性&#xff1a;type : 數字(1),大小寫字母(A,a),大小寫羅馬數字(I,i)start: "起始…

(下)挖掘傳統行業日志大數據的無限價值

&#xfffc;8 月 27 日晚上八點&#xff0c;七牛云高級解決方案架構師程雪松在 IT 大咖說進行了題為《挖掘傳統行業日志大數據的無限價值》的直播&#xff0c;對傳統行業運維常見困境和統一日志管理的必要性進行了深入解析&#xff0c;并通過 Pandora 的一些真實用戶案例和大家…

CMOS圖像傳感器 —— ISOCELL

最近,外媒曝光了三星最新的CIS傳感器路線圖,路線圖顯示,三星在2億像素之外已經規劃2025年推出576MP像素的傳感器,也就是5億7千6百萬像素。 若5.76億像素的傳感器推出,意味著手機傳感器可媲美中高端單反水平了。三星沒有提及這個5.76億像素的傳感器是怎樣實現的。因…

LeetCode 153. Find Minimum in Rotated Sorted Array (在旋轉有序數組中找到最小值)

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 題目標簽&#xff1a;Array, Binary Se…

YUV圖像

YUV420P&#xff0c;Y&#xff0c;U&#xff0c;V三個分量都是平面格式&#xff0c;分為 I420 和 YV12 。 I420 格式和 YV12 格式的不同處在U平面和V平面的位置不同。在I420格式中&#xff0c;U平面緊跟在Y平面之后&#xff0c;然后才是V平面&#xff08;即&#xff1a;YUV&…

色調映射(Tone Mapping)

一、概述 雖然HDR 圖像有較大的動態范圍,能更細致地反映真實場景,但他的缺點也很明顯。一是同尺寸的數據比低動態范圍圖像大,需要更大的存儲空間與傳輸帶寬。二是難以輸出,目前大多數顯示器、打印機等圖形輸出設備的動態范圍要比普通的高動態范圍圖像小得多。。因此,色調映…

實用軟件工具

1.突破百度網盤下載速度現在&#xff0c;使用 Aria2下載 Aria2-不限速全平臺下載利器但是百度網盤賬號會被限速 &#xff0c;沖會員解除正常限制網速2.Safari 預覽&#xff0c;將網頁轉化為自定義尺寸 PDF 3.清除Xcode 緩存 刪除模擬器運行緩存&#xff0c;找到Developer->…

[原創]Toolbar setNavigationIcon無效

最近在做一個Toolbar&#xff0c;setNavigationIcon()這個方法一直無效&#xff0c;說什么的都有&#xff0c;什么getSupportActionBar().setNavigationIcon()的&#xff0c;說設置style的&#xff0c;說放到setSupportActionBar()之后的。 其實沒有說全&#xff0c;還應該放到…

YUV格式詳解

分類&#xff1a; H.264 MPEG TV 2008-05-14 09:24 16181人閱讀 評論(21) 收藏 舉報 YUV是指亮度參量和色度參量分開表示的像素格式&#xff0c;而這樣分開的好處就是不但可以避免相互干擾&#xff0c;還可以降低色度的采樣率而不會對圖像質量影響太大。YUV是一個比較籠統地說…

KVM安裝、鏡像創建(一)

環境準備 VMware Workstation Pro啟動虛擬化 查看啟動的系統是否支持vmx或svm grep -E (vmx|svm) /proc/cpuinfo 備注&#xff1a;操作系統centos 7 KVM安裝 1、yum查看kvm安裝包 yum list |grep kvm 2、安裝 yum install -y qemu-kvm qemu-kvm-tools libvirt3、啟動libvirtd s…