尺寸相關
dp與px轉換dp2px、px2dp
sp與px轉換sp2px、px2sp
各種單位轉換applyDimension
在onCreate()即可強行獲取View的尺寸forceGetViewSize
ListView中提前測量View尺寸measureView
設備相關
獲取設備MAC地址getMacAddress
獲取設備廠商,如XiaomigetManufacturer
獲取設備型號,如MI2SCgetModel
獲取設備SD卡是否可用isSDCardEnable
獲取設備SD卡路徑getSDCardPath
手機相關
判斷設備是否是手機isPhone
獲取手機的IMIEgetDeviceIMEI
獲取手機狀態(tài)信息getPhoneStatus
撥打電話callDial
發(fā)送短信sendSms
獲取手機聯(lián)系人getAllContactInfo
打開手機聯(lián)系人界面點擊聯(lián)系人后便獲取該號碼getContantNum
獲取手機短信并保存到xml中getAllSMS
網(wǎng)絡相關
打開網(wǎng)絡設置界面openWirelessSettings
判斷是否網(wǎng)絡連接isConnected
判斷wifi是否連接狀態(tài)isWifiConnected
獲取移動網(wǎng)絡運營商名稱getNetworkOperatorName
獲取移動終端類型getPhoneType
獲取連接的網(wǎng)絡類型(2G,3G,4G)getCurNetworkType
獲取當前手機的網(wǎng)絡類型(WIFI,2G,3G,4G)getNetWorkStatus
App相關
安裝指定路徑下的ApkinstallApk
卸載指定包名的AppuninstallApp
獲取App名稱getAppName
獲取當前App版本號getVersonName
獲取當前App版本CodegetVersionCode
打開指定包名的AppopenOtherApp
打開指定包名的App應用信息界面showAppInfo
分享Apk信息shareApkInfo
獲取App信息的一個封裝類(包名、版本號、應用信息、圖標、名稱等)getAppInfos
判斷當前App處于前臺還是后臺isApplicationBackground
屏幕相關
獲取手機分辨率getDeviceWidth、getDeviceHeight
獲取狀態(tài)欄高度getStatusBarHeight
獲取狀態(tài)欄高度+標題欄(ActionBar)高度getTopBarHeight
獲取屏幕截圖snapShotWithStatusBar、snapShotWithoutStatusBar
設置透明狀態(tài)欄,需在setContentView之前調(diào)用
鍵盤相關
避免輸入法面板遮擋
動態(tài)隱藏軟鍵盤hideSoftInput
點擊屏幕空白區(qū)域隱藏軟鍵盤
動態(tài)顯示軟鍵盤showSoftInput
切換鍵盤顯示與否狀態(tài)toggleSoftInput
正則相關
正則工具類
加解密相關
MD5加密encryptMD5
SHA加密encryptSHA
未歸類
獲取服務是否開啟isRunningService
更新Log
做這份整理只是想把它作為Android的一本小字典,當遇到一些瑣碎問題時,不用再面向百度或者谷歌查詢API的使用,費時費力,這里有的話,大家盡管擼走。希望它能逐日壯大起來,期待你的Star和完善,用途的話大家想把它們整理成工具類或者什么的話都可以,之后我也會封裝工具類并分享之,但本篇只是提供查閱,畢竟看md比看類文件要爽多了,其中好多代碼我也是各種搜刮來的,也要謝謝各位的總結,大部分代碼已驗證過可行,如有錯誤,請及時告之,開設QQ群提供討論,群號:74721490
分類已上傳至Github,傳送門→期待你的Star和完善
好了,廢話不多說,開始開車,嘟嘟......
/**
* dp轉px
*/publicstaticintdp2px(Context context,floatdpValue){finalfloatscale = context.getResources().getDisplayMetrics().density;return(int) (dpValue * scale +0.5f);}/**
* px轉dp
*/publicstaticintpx2dp(Context context,floatpxValue){finalfloatscale = context.getResources().getDisplayMetrics().density;return(int) (pxValue / scale +0.5f);}
/**
* sp轉px
*/publicstaticintsp2px(Context context,floatspValue){finalfloatfontScale = context.getResources().getDisplayMetrics().scaledDensity;return(int) (spValue * fontScale +0.5f);}/**
* px轉sp
*/publicstaticintpx2sp(Context context,floatpxValue){finalfloatfontScale = context.getResources().getDisplayMetrics().scaledDensity;return(int) (pxValue / fontScale +0.5f);}
/**
* 各種單位轉換
* 該方法存在于TypedValue
*/publicstaticfloatapplyDimension(intunit,floatvalue, DisplayMetrics metrics){switch(unit) {caseTypedValue.COMPLEX_UNIT_PX:returnvalue;caseTypedValue.COMPLEX_UNIT_DIP:returnvalue * metrics.density;caseTypedValue.COMPLEX_UNIT_SP:returnvalue * metrics.scaledDensity;caseTypedValue.COMPLEX_UNIT_PT:returnvalue * metrics.xdpi * (1.0f/72);caseTypedValue.COMPLEX_UNIT_IN:returnvalue * metrics.xdpi;caseTypedValue.COMPLEX_UNIT_MM:returnvalue * metrics.xdpi * (1.0f/25.4f);? ? }return0;}
/**
* 在onCreate()即可強行獲取View的尺寸
*/publicstaticint[] forceGetViewSize(View view) {intwidthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);intheightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);? ? view.measure(widthMeasureSpec, heightMeasureSpec);returnnewint[]{view.getMeasuredWidth(), view.getMeasuredHeight()};}
/**
* ListView中提前測量View尺寸
* 如headerView,用的時候拷貝到ListView中
*/privatevoidmeasureView(View view){? ? ViewGroup.LayoutParams p = view.getLayoutParams();if(p ==null) {? ? ? ? p =newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,? ? ? ? ? ? ? ? ViewGroup.LayoutParams.WRAP_CONTENT);? ? }intwidth = ViewGroup.getChildMeasureSpec(0,0, p.width);intheight;inttempHeight = p.height;if(tempHeight >0) {? ? ? ? height = MeasureSpec.makeMeasureSpec(tempHeight,? ? ? ? ? ? ? ? MeasureSpec.EXACTLY);? ? }else{? ? ? ? height = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);? ? }? ? view.measure(width, height);}
/**
* 獲取設備MAC地址
* 需添加權限
*/publicstaticStringgetMacAddress(Context context){? ? String macAddress =null;? ? WifiManager wifi = (WifiManager) context? ? ? ? ? ? .getSystemService(Context.WIFI_SERVICE);? ? WifiInfo info = wifi.getConnectionInfo();if(null!= info ) {? ? ? ? macAddress = info.getMacAddress();if(null!= macAddress) {? ? ? ? ? ? macAddress = macAddress.replace(":","");? ? ? ? }? ? }returnmacAddress;}
/**
* 獲取設備廠商,如Xiaomi
*/publicstaticStringgetManufacturer(){? ? String MANUFACTURER = Build.MANUFACTURER;returnMANUFACTURER;}
/**
* 獲取設備型號,如MI2SC
*/publicstaticStringgetModel(){? ? String model = Build.MODEL;if(model !=null) {? ? ? ? model = model.trim().replaceAll("\\s*","");? ? }else{? ? ? ? model ="";? ? }returnmodel;}
/**
* 獲取設備SD卡是否可用
*/publicstaticbooleanisSDCardEnable(){returnEnvironment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());}
/**
* 獲取設備SD卡路徑
*/publicstaticStringgetSDCardPath(){returnEnvironment.getExternalStorageDirectory().getAbsolutePath() + File.separator;}
/**
* 判斷設備是否是手機
*/publicstaticbooleanisPhone(Context context){? ? TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);returntm.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE;}
/**
* 獲取當前設備的IMIE,需與上面的isPhone一起使用
* 需添加權限
*/publicstaticStringgetDeviceIMEI(Context context){? ? String deviceId;if(isPhone(context)) {? ? ? ? TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);? ? ? ? deviceId = tm.getDeviceId();? ? }else{? ? ? ? deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);? ? }returndeviceId;}
/**
* 獲取手機狀態(tài)信息
* 需添加權限
* 返回如下
* DeviceId(IMEI) = 99000311726612
* DeviceSoftwareVersion = 00
* Line1Number =
* NetworkCountryIso = cn
* NetworkOperator = 46003
* NetworkOperatorName = 中國電信
* NetworkType = 6
* honeType = 2
* SimCountryIso = cn
* SimOperator = 46003
* SimOperatorName = 中國電信
* SimSerialNumber = 89860315045710604022
* SimState = 5
* SubscriberId(IMSI) = 460030419724900
* VoiceMailNumber = *86
*/publicstaticStringgetPhoneStatus(Context context){? ? TelephonyManager tm = (TelephonyManager) context? ? ? ? ? ? .getSystemService(Context.TELEPHONY_SERVICE);? ? String str ="";? ? str +="DeviceId(IMEI) = "+ tm.getDeviceId() +"\n";? ? str +="DeviceSoftwareVersion = "+ tm.getDeviceSoftwareVersion() +"\n";? ? str +="Line1Number = "+ tm.getLine1Number() +"\n";? ? str +="NetworkCountryIso = "+ tm.getNetworkCountryIso() +"\n";? ? str +="NetworkOperator = "+ tm.getNetworkOperator() +"\n";? ? str +="NetworkOperatorName = "+ tm.getNetworkOperatorName() +"\n";? ? str +="NetworkType = "+ tm.getNetworkType() +"\n";? ? str +="honeType = "+ tm.getPhoneType() +"\n";? ? str +="SimCountryIso = "+ tm.getSimCountryIso() +"\n";? ? str +="SimOperator = "+ tm.getSimOperator() +"\n";? ? str +="SimOperatorName = "+ tm.getSimOperatorName() +"\n";? ? str +="SimSerialNumber = "+ tm.getSimSerialNumber() +"\n";? ? str +="SimState = "+ tm.getSimState() +"\n";? ? str +="SubscriberId(IMSI) = "+ tm.getSubscriberId() +"\n";? ? str +="VoiceMailNumber = "+ tm.getVoiceMailNumber() +"\n";returnstr;}
// 需添加權限/**
* 撥打電話
*/publicstaticvoidcallDial(Context context, String phoneNumber){? ? context.startActivity(newIntent(Intent.ACTION_CALL, Uri.parse("tel:"+ phoneNumber)));}
/**
* 發(fā)送短信
*/publicstaticvoidsendSms(Context context, String phoneNumber, String content){? ? Uri uri = Uri.parse("smsto:"+ (TextUtils.isEmpty(phoneNumber) ?"": phoneNumber));? ? Intent intent =newIntent(Intent.ACTION_SENDTO, uri);? ? intent.putExtra("sms_body", TextUtils.isEmpty(content) ?"": content);? ? context.startActivity(intent);}
/**
* 獲取手機聯(lián)系人
* 需添加權限
* 需添加權限
*/publicstaticList> getAllContactInfo(Context context) {? ? SystemClock.sleep(3000);? ? ArrayList> list =newArrayList>();// 1.獲取內(nèi)容解析者ContentResolver resolver = context.getContentResolver();// 2.獲取內(nèi)容提供者的地址:com.android.contacts// raw_contacts表的地址 :raw_contacts// view_data表的地址 : data// 3.生成查詢地址Uri raw_uri = Uri.parse("content://com.android.contacts/raw_contacts");? ? Uri date_uri = Uri.parse("content://com.android.contacts/data");// 4.查詢操作,先查詢raw_contacts,查詢contact_id// projection : 查詢的字段Cursor cursor = resolver.query(raw_uri,newString[] {"contact_id"},null,null,null);// 5.解析cursorwhile(cursor.moveToNext()) {// 6.獲取查詢的數(shù)據(jù)String contact_id = cursor.getString(0);// cursor.getString(cursor.getColumnIndex("contact_id"));//getColumnIndex// : 查詢字段在cursor中索引值,一般都是用在查詢字段比較多的時候// 判斷contact_id是否為空if(!TextUtils.isEmpty(contact_id)) {//null? ""http:// 7.根據(jù)contact_id查詢view_data表中的數(shù)據(jù)// selection : 查詢條件// selectionArgs :查詢條件的參數(shù)// sortOrder : 排序// 空指針: 1.null.方法 2.參數(shù)為nullCursor c = resolver.query(date_uri,newString[] {"data1","mimetype"},"raw_contact_id=?",newString[] { contact_id },null);? ? ? ? ? ? HashMap map =newHashMap();// 8.解析cwhile(c.moveToNext()) {// 9.獲取數(shù)據(jù)String data1 = c.getString(0);? ? ? ? ? ? ? ? String mimetype = c.getString(1);// 10.根據(jù)類型去判斷獲取的data1數(shù)據(jù)并保存if(mimetype.equals("vnd.android.cursor.item/phone_v2")) {// 電話map.put("phone", data1);? ? ? ? ? ? ? ? }elseif(mimetype.equals("vnd.android.cursor.item/name")) {// 姓名map.put("name", data1);? ? ? ? ? ? ? ? }? ? ? ? ? ? }// 11.添加到集合中數(shù)據(jù)list.add(map);// 12.關閉cursorc.close();? ? ? ? }? ? }// 12.關閉cursorcursor.close();returnlist;}
打開手機聯(lián)系人界面點擊聯(lián)系人后便獲取該號碼
/**
* 打開手機聯(lián)系人界面點擊聯(lián)系人后便獲取該號碼
* 參照以下代碼
*/privatevoidgetContantNum(){/*
? ? Intent intent = new Intent();
? ? intent.setAction("android.intent.action.PICK");
? ? intent.addCategory("android.intent.category.DEFAULT");
? ? intent.setType("vnd.android.cursor.dir/phone_v2");
? ? startActivityForResult(intent, 0);
? ? @Override
? ? protected void onActivityResult ( int requestCode, int resultCode, Intent data){
? ? ? ? super.onActivityResult(requestCode, resultCode, data);
? ? ? ? if (data != null) {
? ? ? ? ? ? Uri uri = data.getData();
? ? ? ? ? ? String num = null;
? ? ? ? ? ? // 創(chuàng)建內(nèi)容解析者
? ? ? ? ? ? ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? Cursor cursor = contentResolver.query(uri,
? ? ? ? ? ? ? ? ? ? null, null, null, null);
? ? ? ? ? ? while (cursor.moveToNext()) {
? ? ? ? ? ? ? ? num = cursor.getString(cursor.getColumnIndex("data1"));
? ? ? ? ? ? }
? ? ? ? ? ? cursor.close();
? ? ? ? ? ? num = num.replaceAll("-", "");//替換的操作,555-6 -> 5556
? ? ? ? }
? ? }
? ? */}
/**
* 獲取手機短信并保存到xml中
* 需添加權限
* 需添加權限
*/publicstaticvoidgetAllSMS(Context context){//1.獲取短信//1.1獲取內(nèi)容解析者ContentResolver resolver = context.getContentResolver();//1.2獲取內(nèi)容提供者地址? sms,sms表的地址:null? 不寫//1.3獲取查詢路徑Uri uri = Uri.parse("content://sms");//1.4.查詢操作//projection : 查詢的字段//selection : 查詢的條件//selectionArgs : 查詢條件的參數(shù)//sortOrder : 排序Cursor cursor = resolver.query(uri,newString[]{"address","date","type","body"},null,null,null);//設置最大進度intcount = cursor.getCount();//獲取短信的個數(shù)//2.備份短信//2.1獲取xml序列器XmlSerializer xmlSerializer = Xml.newSerializer();try{//2.2設置xml文件保存的路徑//os : 保存的位置//encoding : 編碼格式xmlSerializer.setOutput(newFileOutputStream(newFile("/mnt/sdcard/backupsms.xml")),"utf-8");//2.3設置頭信息//standalone : 是否獨立保存xmlSerializer.startDocument("utf-8",true);//2.4設置根標簽xmlSerializer.startTag(null,"smss");//1.5.解析cursorwhile(cursor.moveToNext()) {? ? ? ? ? ? SystemClock.sleep(1000);//2.5設置短信的標簽xmlSerializer.startTag(null,"sms");//2.6設置文本內(nèi)容的標簽xmlSerializer.startTag(null,"address");? ? ? ? ? ? String address = cursor.getString(0);//2.7設置文本內(nèi)容xmlSerializer.text(address);? ? ? ? ? ? xmlSerializer.endTag(null,"address");? ? ? ? ? ? xmlSerializer.startTag(null,"date");? ? ? ? ? ? String date = cursor.getString(1);? ? ? ? ? ? xmlSerializer.text(date);? ? ? ? ? ? xmlSerializer.endTag(null,"date");? ? ? ? ? ? xmlSerializer.startTag(null,"type");? ? ? ? ? ? String type = cursor.getString(2);? ? ? ? ? ? xmlSerializer.text(type);? ? ? ? ? ? xmlSerializer.endTag(null,"type");? ? ? ? ? ? xmlSerializer.startTag(null,"body");? ? ? ? ? ? String body = cursor.getString(3);? ? ? ? ? ? xmlSerializer.text(body);? ? ? ? ? ? xmlSerializer.endTag(null,"body");? ? ? ? ? ? xmlSerializer.endTag(null,"sms");? ? ? ? ? ? System.out.println("address:"+ address +"? date:"+ date +"? type:"+ type +"? body:"+ body);? ? ? ? }? ? ? ? xmlSerializer.endTag(null,"smss");? ? ? ? xmlSerializer.endDocument();//2.8將數(shù)據(jù)刷新到文件中xmlSerializer.flush();? ? }catch(Exception e) {// TODO Auto-generated catch blocke.printStackTrace();? ? }}
/**
* 打開網(wǎng)絡設置界面
* 3.0以下打開設置界面
*/publicstaticvoidopenWirelessSettings(Context context){if(android.os.Build.VERSION.SDK_INT >10) {? ? ? ? context.startActivity(newIntent(android.provider.Settings.ACTION_SETTINGS));? ? }else{? ? ? ? context.startActivity(newIntent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));? ? }}
/**
* 判斷是否網(wǎng)絡連接
* 需添加權限
*/publicstaticbooleanisConnected(Context context){? ? ConnectivityManager cm = (ConnectivityManager) context? ? ? ? ? ? .getSystemService(Activity.CONNECTIVITY_SERVICE);? ? NetworkInfo info = cm.getActiveNetworkInfo();returninfo !=null&& info.isConnected();}
/**
* 判斷wifi是否連接狀態(tài)
* 需添加權限
*/publicstaticbooleanisWifiConnected(Context context){? ? ConnectivityManager cm = (ConnectivityManager) context? ? ? ? ? ? .getSystemService(Context.CONNECTIVITY_SERVICE);returncm !=null&& cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;}
/**
* 獲取移動網(wǎng)絡運營商名稱
* 如中國聯(lián)通、中國移動、中國電信
*/publicstaticStringgetNetworkOperatorName(Context context){? ? TelephonyManager tm = (TelephonyManager) context? ? ? ? ? ? .getSystemService(Context.TELEPHONY_SERVICE);returntm !=null? tm.getNetworkOperatorName() :null;}
/**
* 獲取移動終端類型
* PHONE_TYPE_NONE? : 0 手機制式未知
* PHONE_TYPE_GSM? : 1 手機制式為GSM,移動和聯(lián)通
* PHONE_TYPE_CDMA? : 2 手機制式為CDMA,電信
* PHONE_TYPE_SIP? : 3
*/publicstaticintgetPhoneType(Context context){? ? TelephonyManager tm = (TelephonyManager) context? ? ? ? ? ? .getSystemService(Context.TELEPHONY_SERVICE);returntm !=null? tm.getPhoneType() : -1;}
/**
* 獲取連接的網(wǎng)絡類型(2G,3G,4G)
* 聯(lián)通的3G為UMTS或HSDPA,移動和聯(lián)通的2G為GPRS或EGDE,電信的2G為CDMA,電信的3G為EVDO
*/publicstaticintgetNetTpye(Context context){? ? TelephonyManager telephonyManager = (TelephonyManager) context? ? ? ? ? ? .getSystemService(Context.TELEPHONY_SERVICE);switch(telephonyManager.getNetworkType()) {caseTelephonyManager.NETWORK_TYPE_GPRS:caseTelephonyManager.NETWORK_TYPE_EDGE:caseTelephonyManager.NETWORK_TYPE_CDMA:caseTelephonyManager.NETWORK_TYPE_1xRTT:caseTelephonyManager.NETWORK_TYPE_IDEN:returnConstants.NETWORK_CLASS_2_G;caseTelephonyManager.NETWORK_TYPE_UMTS:caseTelephonyManager.NETWORK_TYPE_EVDO_0:caseTelephonyManager.NETWORK_TYPE_EVDO_A:caseTelephonyManager.NETWORK_TYPE_HSDPA:caseTelephonyManager.NETWORK_TYPE_HSUPA:caseTelephonyManager.NETWORK_TYPE_HSPA:caseTelephonyManager.NETWORK_TYPE_EVDO_B:caseTelephonyManager.NETWORK_TYPE_EHRPD:caseTelephonyManager.NETWORK_TYPE_HSPAP:returnConstants.NETWORK_CLASS_3_G;caseTelephonyManager.NETWORK_TYPE_LTE:returnConstants.NETWORK_CLASS_4_G;default:returnConstants.NETWORK_CLASS_UNKNOWN;? ? }}publicclassConstants{// Unknown network classpublicstaticfinalintNETWORK_CLASS_UNKNOWN =0;// wifi networkpublicstaticfinalintNETWORK_WIFI =1;// "2G" networkspublicstaticfinalintNETWORK_CLASS_2_G =2;// "3G" networkspublicstaticfinalintNETWORK_CLASS_3_G =3;// "4G" networkspublicstaticfinalintNETWORK_CLASS_4_G =4;}
獲取當前手機的網(wǎng)絡類型(WIFI,2G,3G,4G)
/**
* 獲取當前手機的網(wǎng)絡類型(WIFI,2G,3G,4G)
* 需添加權限
* 需要用到上面的方法
*/publicstaticintgetCurNetworkType(Context context){intnetWorkType = Constants.NETWORK_CLASS_UNKNOWN;? ? ConnectivityManager cm = (ConnectivityManager) context? ? ? ? ? ? .getSystemService(Context.CONNECTIVITY_SERVICE);? ? NetworkInfo networkInfo = cm.getActiveNetworkInfo();if(networkInfo !=null&& networkInfo.isConnected()) {inttype = networkInfo.getType();if(type == ConnectivityManager.TYPE_WIFI) {? ? ? ? ? ? netWorkType = Constants.NETWORK_WIFI;? ? ? ? }elseif(type == ConnectivityManager.TYPE_MOBILE) {? ? ? ? ? ? netWorkType = getNetworkTpye(context);? ? ? ? }? ? }returnnetWorkType;}
/**
* 安裝指定路徑下的Apk
*/publicvoidinstallApk(String filePath){? ? Intent intent =newIntent();? ? intent.setAction("android.intent.action.VIEW");? ? intent.addCategory("android.intent.category.DEFAULT");? ? intent.setDataAndType(Uri.fromFile(newFile(filePath)),"application/vnd.android.package-archive");? ? startActivityForResult(intent,0);}
/**
* 卸載指定包名的App
*/publicvoiduninstallApp(String packageName){? ? Intent intent =newIntent();? ? intent.setAction("android.intent.action.DELETE");? ? intent.addCategory("android.intent.category.DEFAULT");? ? intent.setData(Uri.parse("package:"+ packageName));? ? startActivityForResult(intent,0);}
/**
* 獲取App名稱
*/publicstaticStringgetAppName(Context context){try{? ? ? ? PackageManager packageManager = context.getPackageManager();? ? ? ? PackageInfo packageInfo = packageManager.getPackageInfo(? ? ? ? ? ? ? ? context.getPackageName(),0);intlabelRes = packageInfo.applicationInfo.labelRes;returncontext.getResources().getString(labelRes);? ? }catch(NameNotFoundException e) {? ? ? ? e.printStackTrace();? ? }returnnull;}
/**
* 獲取當前App版本號
*/publicstaticStringgetVersionName(Context context){? ? String versionName =null;? ? PackageManager pm = context.getPackageManager();? ? PackageInfo info =null;try{? ? ? ? info = pm.getPackageInfo(context.getApplicationContext().getPackageName(),0);? ? }catch(NameNotFoundException e) {? ? ? ? e.printStackTrace();? ? }if(info !=null) {? ? ? ? versionName = info.versionName;? ? }returnversionName;}
/**
* 獲取當前App版本Code
*/publicstaticintgetVersionCode(Context context){intversionCode =0;? ? PackageManager pm = context.getPackageManager();? ? PackageInfo info =null;try{? ? ? ? info = pm.getPackageInfo(context.getApplicationContext().getPackageName(),0);? ? }catch(PackageManager.NameNotFoundException e) {? ? ? ? e.printStackTrace();? ? }if(info !=null) {? ? ? ? versionCode = info.versionCode;? ? }returnversionCode;}
/**
* 打開指定包名的App
*/publicvoidopenOtherApp(String packageName){? ? PackageManager manager = getPackageManager();? ? Intent launchIntentForPackage = manager.getLaunchIntentForPackage(packageName);if(launchIntentForPackage !=null) {? ? ? ? startActivity(launchIntentForPackage);? ? }}
/**
* 打開指定包名的App應用信息界面
*/publicvoidshowAppInfo(String packageName){? ? Intent intent =newIntent();? ? intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");? ? intent.setData(Uri.parse("package:"+ packageName));? ? startActivity(intent);}
/**
* 分享Apk信息
*/publicvoidshareApkInfo(String info){? ? Intent intent =newIntent();? ? intent.setAction("android.intent.action.SEND");? ? intent.addCategory("android.intent.category.DEFAULT");? ? intent.setType("text/plain");? ? intent.putExtra(Intent.EXTRA_TEXT, info);? ? startActivity(intent);}
獲取App信息的一個封裝類(包名、版本號、應用信息、圖標、名稱等)
/**
* 獲取App信息的一個封裝類(包名、版本號、應用信息、圖標、名稱等)
*/publicclassAppEnging{publicstaticListgetAppInfos(Context context){? ? ? ? List list =newArrayList();//獲取應用程序信息//包的管理者PackageManager pm = context.getPackageManager();//獲取系統(tǒng)中安裝到所有軟件信息List installedPackages = pm.getInstalledPackages(0);for(PackageInfo packageInfo : installedPackages) {//獲取包名String packageName = packageInfo.packageName;//獲取版本號String versionName = packageInfo.versionName;//獲取applicationApplicationInfo applicationInfo = packageInfo.applicationInfo;intuid = applicationInfo.uid;//獲取應用程序的圖標Drawable icon = applicationInfo.loadIcon(pm);//獲取應用程序的名稱String name = applicationInfo.loadLabel(pm).toString();//是否是用戶程序//獲取應用程序中相關信息,是否是系統(tǒng)程序和是否安裝到SD卡booleanisUser;intflags = applicationInfo.flags;if((applicationInfo.FLAG_SYSTEM & flags) == applicationInfo.FLAG_SYSTEM) {//系統(tǒng)程序isUser =false;? ? ? ? ? ? }else{//用戶程序isUser =true;? ? ? ? ? ? }//是否安裝到SD卡booleanisSD;if((applicationInfo.FLAG_EXTERNAL_STORAGE & flags) == applicationInfo.FLAG_EXTERNAL_STORAGE) {//安裝到了SD卡isSD =true;? ? ? ? ? ? }else{//安裝到手機中isSD =false;? ? ? ? ? ? }//添加到bean中AppInfo appInfo =newAppInfo(name, icon, packageName, versionName, isSD, isUser);//將bean存放到list集合list.add(appInfo);? ? ? ? }returnlist;? ? }}// 封裝軟件信息的bean類classAppInfo{//名稱privateString name;//圖標privateDrawable icon;//包名privateString packagName;//版本號privateString versionName;//是否安裝到SD卡privatebooleanisSD;//是否是用戶程序privatebooleanisUser;publicAppInfo(){super();? ? }publicAppInfo(String name, Drawable icon, String packagName,? ? ? ? ? ? ? ? ? String versionName,booleanisSD,booleanisUser){super();this.name = name;this.icon = icon;this.packagName = packagName;this.versionName = versionName;this.isSD = isSD;this.isUser = isUser;? ? }}
// 需添加// 并且必須是系統(tǒng)應用該方法才有效/**
* 判斷當前App處于前臺還是后臺
*/publicstaticbooleanisApplicationBackground(finalContext context){? ? ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);@SuppressWarnings("deprecation")? ? List tasks = am.getRunningTasks(1);if(!tasks.isEmpty()) {? ? ? ? ComponentName topActivity = tasks.get(0).topActivity;if(!topActivity.getPackageName().equals(context.getPackageName())) {returntrue;? ? ? ? }? ? }returnfalse;}
/**
* 獲取屏幕的寬度px
*/publicstaticintgetDeviceWidth(Context context){? ? WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);? ? DisplayMetrics outMetrics =newDisplayMetrics();// 創(chuàng)建了一張白紙windowManager.getDefaultDisplay().getMetrics(outMetrics);// 給白紙設置寬高returnoutMetrics.widthPixels;}/**
* 獲取屏幕的高度px
*/publicstaticintgetDeviceHeight(Context context){? ? WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);? ? DisplayMetrics outMetrics =newDisplayMetrics();// 創(chuàng)建了一張白紙windowManager.getDefaultDisplay().getMetrics(outMetrics);// 給白紙設置寬高returnoutMetrics.heightPixels;}
/**
* 獲取狀態(tài)欄高度
*/publicintgetStatusBarHeight(){intresult =0;intresourceId = getResources().getIdentifier("status_bar_height","dimen","android");if(resourceId >0) {? ? ? ? result = getResources().getDimensionPixelSize(resourceId);? ? }returnresult;}
/**
* 獲取狀態(tài)欄高度+標題欄(ActionBar)高度
*/publicstaticintgetTopBarHeight(Activity activity){returnactivity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();}
/**
* 獲取當前屏幕截圖,包含狀態(tài)欄
*/publicstaticBitmapsnapShotWithStatusBar(Activity activity){? ? View view = activity.getWindow().getDecorView();? ? view.setDrawingCacheEnabled(true);? ? view.buildDrawingCache();? ? Bitmap bmp = view.getDrawingCache();intwidth = getScreenWidth(activity);intheight = getScreenHeight(activity);? ? Bitmap bp =null;? ? bp = Bitmap.createBitmap(bmp,0,0, width, height);? ? view.destroyDrawingCache();returnbp;}/**
* 獲取當前屏幕截圖,不包含狀態(tài)欄
*/publicstaticBitmapsnapShotWithoutStatusBar(Activity activity){? ? View view = activity.getWindow().getDecorView();? ? view.setDrawingCacheEnabled(true);? ? view.buildDrawingCache();? ? Bitmap bmp = view.getDrawingCache();? ? Rect frame =newRect();? ? activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);intstatusBarHeight = frame.top;intwidth = getScreenWidth(activity);intheight = getScreenHeight(activity);? ? Bitmap bp =null;? ? bp = Bitmap.createBitmap(bmp,0, statusBarHeight, width, height? ? ? ? ? ? - statusBarHeight);? ? view.destroyDrawingCache();returnbp;}
設置透明狀態(tài)欄,需在setContentView之前調(diào)用
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明狀態(tài)欄getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明導航欄getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}// 需在頂部控件布局中加入以下屬性讓內(nèi)容出現(xiàn)在狀態(tài)欄之下android:clipToPadding="true"android:fitsSystemWindows="true"
// 在manifest.xml中activity中設置android:windowSoftInputMode="stateVisible|adjustResize"
/**
* 動態(tài)隱藏軟鍵盤
*/publicstaticvoidhideSoftInput(Activity activity){? ? View view = activity.getWindow().peekDecorView();if(view !=null) {? ? ? ? InputMethodManager inputmanger = (InputMethodManager) activity? ? ? ? ? ? ? ? .getSystemService(Context.INPUT_METHOD_SERVICE);? ? ? ? inputmanger.hideSoftInputFromWindow(view.getWindowToken(),0);? ? }}/**
* 動態(tài)隱藏軟鍵盤
*/publicstaticvoidhideSoftInput(Context context, EditText edit){? ? edit.clearFocus();? ? InputMethodManager inputmanger = (InputMethodManager) context? ? ? ? ? ? .getSystemService(Context.INPUT_METHOD_SERVICE);? ? inputmanger.hideSoftInputFromWindow(edit.getWindowToken(),0);}
// 方法1:在onTouch中處理,未獲焦點則隱藏/**
* 在onTouch中處理,未獲焦點則隱藏
*/@OverridepublicbooleanonTouchEvent(MotionEvent event){if(null!=this.getCurrentFocus()) {? ? ? ? InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);returnmInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),0);? ? }returnsuper.onTouchEvent(event);}// 方法2:根據(jù)EditText所在坐標和用戶點擊的坐標相對比,來判斷是否隱藏鍵盤,需重寫dispatchTouchEvent@OverridepublicbooleandispatchTouchEvent(MotionEvent ev){if(ev.getAction() == MotionEvent.ACTION_DOWN) {? ? ? ? View v = getCurrentFocus();if(isShouldHideKeyboard(v, ev)) {? ? ? ? ? ? hideKeyboard(v.getWindowToken());? ? ? ? }? ? }returnsuper.dispatchTouchEvent(ev);}/**
* 根據(jù)EditText所在坐標和用戶點擊的坐標相對比,來判斷是否隱藏鍵盤
*/privatebooleanisShouldHideKeyboard(View v, MotionEvent event){if(v !=null&& (vinstanceofEditText)) {int[] l = {0,0};? ? ? ? v.getLocationInWindow(l);intleft = l[0],? ? ? ? ? ? ? ? top = l[1],? ? ? ? ? ? ? ? bottom = top + v.getHeight(),? ? ? ? ? ? ? ? right = left + v.getWidth();return!(event.getX() > left && event.getX() < right? ? ? ? ? ? ? ? && event.getY() > top && event.getY() < bottom);? ? }returnfalse;}/**
* 獲取InputMethodManager,隱藏軟鍵盤
*/privatevoidhideKeyboard(IBinder token){if(token !=null) {? ? ? ? InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);? ? ? ? im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);? ? }}
/**
* 動態(tài)顯示軟鍵盤
*/publicstaticvoidshowSoftInput(Context context, EditText edit){? ? edit.setFocusable(true);? ? edit.setFocusableInTouchMode(true);? ? edit.requestFocus();? ? InputMethodManager inputManager = (InputMethodManager) context? ? ? ? ? ? .getSystemService(Context.INPUT_METHOD_SERVICE);? ? inputManager.showSoftInput(edit,0);}
/**
* 切換鍵盤顯示與否狀態(tài)
*/publicstaticvoidtoggleSoftInput(Context context, EditText edit){? ? edit.setFocusable(true);? ? edit.setFocusableInTouchMode(true);? ? edit.requestFocus();? ? InputMethodManager inputManager = (InputMethodManager) context? ? ? ? ? ? .getSystemService(Context.INPUT_METHOD_SERVICE);? ? inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);}
publicclassRegularUtils{//驗證手機號privatestaticfinalString REGEX_MOBILE ="^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";//驗證座機號,正確格式:xxx/xxxx-xxxxxxx/xxxxxxxxprivatestaticfinalString REGEX_TEL ="^0\\d{2,3}[- ]?\\d{7,8}";//驗證郵箱privatestaticfinalString REGEX_EMAIL ="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";//驗證urlprivatestaticfinalString REGEX_URL ="http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";//驗證漢字privatestaticfinalString REGEX_CHZ ="^[\\u4e00-\\u9fa5]+$";//驗證用戶名,取值范圍為a-z,A-Z,0-9,"_",漢字,不能以"_"結尾,用戶名必須是6-20位privatestaticfinalString REGEX_USERNAME ="^[\\w\\u4e00-\\u9fa5]{6,20}(?
/**
* MD5加密
*/publicstaticStringencryptMD5(String data)throwsException{? ? MessageDigest md5 = MessageDigest.getInstance("MD5");returnnewBigInteger(md5.digest(data.getBytes())).toString(16);}
/**
* SHA加密
*/publicstaticStringencryptSHA(String data)throws Exception{? ? MessageDigest sha = MessageDigest.getInstance("SHA");returnnewBigInteger(sha.digest(data.getBytes())).toString(32);}
/**
* 獲取服務是否開啟
*/publicstaticbooleanisRunningService(String className, Context context){//進程的管理者,活動的管理者ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);//獲取正在運行的服務List runningServices = activityManager.getRunningServices(1000);//maxNum 返回正在運行的服務的上限個數(shù),最多返回多少個服務//遍歷集合for(RunningServiceInfo runningServiceInfo : runningServices) {//獲取控件的標示ComponentName service = runningServiceInfo.service;//獲取正在運行的服務的全類名String className2 = service.getClassName();//將獲取到的正在運行的服務的全類名和傳遞過來的服務的全類名比較,一直表示服務正在運行? 返回true,不一致表示服務沒有運行? 返回falseif(className.equals(className2)) {returntrue;? ? ? ? }? ? }returnfalse;}