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