尺寸相關(guān)
dp與px轉(zhuǎn)換dp2px、px2dp
sp與px轉(zhuǎn)換sp2px、px2sp
各種單位轉(zhuǎn)換applyDimension
在onCreate()即可強(qiáng)行獲取View的尺寸forceGetViewSize
ListView中提前測(cè)量View尺寸measureView
設(shè)備相關(guān)
獲取設(shè)備MAC地址getMacAddress
獲取設(shè)備廠商例证,如XiaomigetManufacturer
獲取設(shè)備型號(hào)辜羊,如MI2SCgetModel
獲取設(shè)備SD卡是否可用isSDCardEnable
獲取設(shè)備SD卡路徑getSDCardPath
手機(jī)相關(guān)
判斷設(shè)備是否是手機(jī)isPhone
獲取手機(jī)的IMIEgetDeviceIMEI
獲取手機(jī)狀態(tài)信息getPhoneStatus
撥打電話callDial
發(fā)送短信sendSms
獲取手機(jī)聯(lián)系人getAllContactInfo
打開(kāi)手機(jī)聯(lián)系人界面點(diǎn)擊聯(lián)系人后便獲取該號(hào)碼getContantNum
獲取手機(jī)短信并保存到xml中getAllSMS
網(wǎng)絡(luò)相關(guān)
打開(kāi)網(wǎng)絡(luò)設(shè)置界面openWirelessSettings
判斷是否網(wǎng)絡(luò)連接isConnected
判斷wifi是否連接狀態(tài)isWifiConnected
獲取移動(dòng)網(wǎng)絡(luò)運(yùn)營(yíng)商名稱getNetworkOperatorName
獲取移動(dòng)終端類(lèi)型getPhoneType
獲取連接的網(wǎng)絡(luò)類(lèi)型(2G,3G,4G)getCurNetworkType
獲取當(dāng)前手機(jī)的網(wǎng)絡(luò)類(lèi)型(WIFI,2G,3G,4G)getNetWorkStatus
App相關(guān)
安裝指定路徑下的ApkinstallApk
卸載指定包名的AppuninstallApp
獲取App名稱getAppName
獲取當(dāng)前App版本號(hào)getVersonName
獲取當(dāng)前App版本CodegetVersionCode
打開(kāi)指定包名的AppopenOtherApp
打開(kāi)指定包名的App應(yīng)用信息界面showAppInfo
分享Apk信息shareApkInfo
獲取App信息的一個(gè)封裝類(lèi)(包名草描、版本號(hào)该抒、應(yīng)用信息慌洪、圖標(biāo)顶燕、名稱等)getAppInfos
判斷當(dāng)前App處于前臺(tái)還是后臺(tái)isApplicationBackground
屏幕相關(guān)
獲取手機(jī)分辨率getDeviceWidth、getDeviceHeight
獲取狀態(tài)欄高度getStatusBarHeight
獲取狀態(tài)欄高度+標(biāo)題欄(ActionBar)高度getTopBarHeight
獲取屏幕截圖snapShotWithStatusBar冈爹、snapShotWithoutStatusBar
設(shè)置透明狀態(tài)欄涌攻,需在setContentView之前調(diào)用
鍵盤(pán)相關(guān)
避免輸入法面板遮擋
動(dòng)態(tài)隱藏軟鍵盤(pán)hideSoftInput
點(diǎn)擊屏幕空白區(qū)域隱藏軟鍵盤(pán)
動(dòng)態(tài)顯示軟鍵盤(pán)showSoftInput
切換鍵盤(pán)顯示與否狀態(tài)toggleSoftInput
正則相關(guān)
正則工具類(lèi)
加解密相關(guān)
MD5加密encryptMD5
SHA加密encryptSHA
未歸類(lèi)
獲取服務(wù)是否開(kāi)啟isRunningService
更新Log
做這份整理只是想把它作為Android的一本小字典,當(dāng)遇到一些瑣碎問(wèn)題時(shí)频伤,不用再面向百度或者谷歌查詢API的使用恳谎,費(fèi)時(shí)費(fèi)力,這里有的話憋肖,大家盡管擼走因痛。希望它能逐日壯大起來(lái),期待你的Star和完善岸更,用途的話大家想把它們整理成工具類(lèi)或者什么的話都可以鸵膏,之后我也會(huì)封裝工具類(lèi)并分享之,但本篇只是提供查閱怎炊,畢竟看md比看類(lèi)文件要爽多了谭企,其中好多代碼我也是各種搜刮來(lái)的,也要謝謝各位的總結(jié)评肆,大部分代碼已驗(yàn)證過(guò)可行债查,如有錯(cuò)誤,請(qǐng)及時(shí)告之瓜挽,開(kāi)設(shè)QQ群提供討論盹廷,群號(hào):74721490
分類(lèi)已上傳至Github,傳送門(mén)→期待你的Star和完善
好了久橙,廢話不多說(shuō)俄占,開(kāi)始開(kāi)車(chē),嘟嘟......
/**
* dp轉(zhuǎn)px
*/publicstaticintdp2px(Context context,floatdpValue){finalfloatscale = context.getResources().getDisplayMetrics().density;return(int) (dpValue * scale +0.5f);}/**
* px轉(zhuǎn)dp
*/publicstaticintpx2dp(Context context,floatpxValue){finalfloatscale = context.getResources().getDisplayMetrics().density;return(int) (pxValue / scale +0.5f);}
/**
* sp轉(zhuǎn)px
*/publicstaticintsp2px(Context context,floatspValue){finalfloatfontScale = context.getResources().getDisplayMetrics().scaledDensity;return(int) (spValue * fontScale +0.5f);}/**
* px轉(zhuǎn)sp
*/publicstaticintpx2sp(Context context,floatpxValue){finalfloatfontScale = context.getResources().getDisplayMetrics().scaledDensity;return(int) (pxValue / fontScale +0.5f);}
/**
* 各種單位轉(zhuǎn)換
* 該方法存在于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()即可強(qiáng)行獲取View的尺寸
/**
* 在onCreate()即可強(qiáng)行獲取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中提前測(cè)量View尺寸
* 如headerView剥汤,用的時(shí)候拷貝到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);}
/**
* 獲取設(shè)備MAC地址
* 需添加權(quán)限
*/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;}
/**
* 獲取設(shè)備廠商,如Xiaomi
*/publicstaticStringgetManufacturer(){? ? String MANUFACTURER = Build.MANUFACTURER;returnMANUFACTURER;}
/**
* 獲取設(shè)備型號(hào),如MI2SC
*/publicstaticStringgetModel(){? ? String model = Build.MODEL;if(model !=null) {? ? ? ? model = model.trim().replaceAll("\\s*","");? ? }else{? ? ? ? model ="";? ? }returnmodel;}
/**
* 獲取設(shè)備SD卡是否可用
*/publicstaticbooleanisSDCardEnable(){returnEnvironment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());}
/**
* 獲取設(shè)備SD卡路徑
*/publicstaticStringgetSDCardPath(){returnEnvironment.getExternalStorageDirectory().getAbsolutePath() + File.separator;}
/**
* 判斷設(shè)備是否是手機(jī)
*/publicstaticbooleanisPhone(Context context){? ? TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);returntm.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE;}
/**
* 獲取當(dāng)前設(shè)備的IMIE暮芭,需與上面的isPhone一起使用
* 需添加權(quán)限
*/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;}
/**
* 獲取手機(jī)狀態(tài)信息
* 需添加權(quán)限
* 返回如下
* DeviceId(IMEI) = 99000311726612
* DeviceSoftwareVersion = 00
* Line1Number =
* NetworkCountryIso = cn
* NetworkOperator = 46003
* NetworkOperatorName = 中國(guó)電信
* NetworkType = 6
* honeType = 2
* SimCountryIso = cn
* SimOperator = 46003
* SimOperatorName = 中國(guó)電信
* 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;}
// 需添加權(quán)限/**
* 撥打電話
*/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);}
/**
* 獲取手機(jī)聯(lián)系人
* 需添加權(quán)限
* 需添加權(quá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.查詢操作,先查詢r(jià)aw_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中索引值,一般都是用在查詢字段比較多的時(shí)候// 判斷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ù)類(lèi)型去判斷獲取的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.關(guān)閉cursorc.close();? ? ? ? }? ? }// 12.關(guān)閉cursorcursor.close();returnlist;}
打開(kāi)手機(jī)聯(lián)系人界面點(diǎn)擊聯(lián)系人后便獲取該號(hào)碼
/**
* 打開(kāi)手機(jī)聯(lián)系人界面點(diǎn)擊聯(lián)系人后便獲取該號(hào)碼
* 參照以下代碼
*/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
? ? ? ? }
? ? }
? ? */}
/**
* 獲取手機(jī)短信并保存到xml中
* 需添加權(quán)限
* 需添加權(quán)限
*/publicstaticvoidgetAllSMS(Context context){//1.獲取短信//1.1獲取內(nèi)容解析者ContentResolver resolver = context.getContentResolver();//1.2獲取內(nèi)容提供者地址? sms,sms表的地址:null? 不寫(xiě)//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);//設(shè)置最大進(jìn)度intcount = cursor.getCount();//獲取短信的個(gè)數(shù)//2.備份短信//2.1獲取xml序列器XmlSerializer xmlSerializer = Xml.newSerializer();try{//2.2設(shè)置xml文件保存的路徑//os : 保存的位置//encoding : 編碼格式xmlSerializer.setOutput(newFileOutputStream(newFile("/mnt/sdcard/backupsms.xml")),"utf-8");//2.3設(shè)置頭信息//standalone : 是否獨(dú)立保存xmlSerializer.startDocument("utf-8",true);//2.4設(shè)置根標(biāo)簽xmlSerializer.startTag(null,"smss");//1.5.解析cursorwhile(cursor.moveToNext()) {? ? ? ? ? ? SystemClock.sleep(1000);//2.5設(shè)置短信的標(biāo)簽xmlSerializer.startTag(null,"sms");//2.6設(shè)置文本內(nèi)容的標(biāo)簽xmlSerializer.startTag(null,"address");? ? ? ? ? ? String address = cursor.getString(0);//2.7設(shè)置文本內(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();? ? }}
/**
* 打開(kāi)網(wǎng)絡(luò)設(shè)置界面
* 3.0以下打開(kāi)設(shè)置界面
*/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)絡(luò)連接
* 需添加權(quán)限
*/publicstaticbooleanisConnected(Context context){? ? ConnectivityManager cm = (ConnectivityManager) context? ? ? ? ? ? .getSystemService(Activity.CONNECTIVITY_SERVICE);? ? NetworkInfo info = cm.getActiveNetworkInfo();returninfo !=null&& info.isConnected();}
/**
* 判斷wifi是否連接狀態(tài)
* 需添加權(quán)限
*/publicstaticbooleanisWifiConnected(Context context){? ? ConnectivityManager cm = (ConnectivityManager) context? ? ? ? ? ? .getSystemService(Context.CONNECTIVITY_SERVICE);returncm !=null&& cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;}
獲取移動(dòng)網(wǎng)絡(luò)運(yùn)營(yíng)商名稱
/**
* 獲取移動(dòng)網(wǎng)絡(luò)運(yùn)營(yíng)商名稱
* 如中國(guó)聯(lián)通鹿驼、中國(guó)移動(dòng)、中國(guó)電信
*/publicstaticStringgetNetworkOperatorName(Context context){? ? TelephonyManager tm = (TelephonyManager) context? ? ? ? ? ? .getSystemService(Context.TELEPHONY_SERVICE);returntm !=null? tm.getNetworkOperatorName() :null;}
/**
* 獲取移動(dòng)終端類(lèi)型
* PHONE_TYPE_NONE? : 0 手機(jī)制式未知
* PHONE_TYPE_GSM? : 1 手機(jī)制式為GSM辕宏,移動(dòng)和聯(lián)通
* PHONE_TYPE_CDMA? : 2 手機(jī)制式為CDMA畜晰,電信
* PHONE_TYPE_SIP? : 3
*/publicstaticintgetPhoneType(Context context){? ? TelephonyManager tm = (TelephonyManager) context? ? ? ? ? ? .getSystemService(Context.TELEPHONY_SERVICE);returntm !=null? tm.getPhoneType() : -1;}
獲取連接的網(wǎng)絡(luò)類(lèi)型(2G,3G,4G)
/**
* 獲取連接的網(wǎng)絡(luò)類(lèi)型(2G,3G,4G)
* 聯(lián)通的3G為UMTS或HSDPA,移動(dòng)和聯(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;}
獲取當(dāng)前手機(jī)的網(wǎng)絡(luò)類(lèi)型(WIFI,2G,3G,4G)
/**
* 獲取當(dāng)前手機(jī)的網(wǎng)絡(luò)類(lèi)型(WIFI,2G,3G,4G)
* 需添加權(quán)限
* 需要用到上面的方法
*/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;}
/**
* 獲取當(dāng)前App版本號(hào)
*/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;}
/**
* 獲取當(dāng)前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;}
/**
* 打開(kāi)指定包名的App
*/publicvoidopenOtherApp(String packageName){? ? PackageManager manager = getPackageManager();? ? Intent launchIntentForPackage = manager.getLaunchIntentForPackage(packageName);if(launchIntentForPackage !=null) {? ? ? ? startActivity(launchIntentForPackage);? ? }}
/**
* 打開(kāi)指定包名的App應(yīng)用信息界面
*/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信息的一個(gè)封裝類(lèi)(包名、版本號(hào)、應(yīng)用信息块蚌、圖標(biāo)闰非、名稱等)
/**
* 獲取App信息的一個(gè)封裝類(lèi)(包名、版本號(hào)峭范、應(yīng)用信息财松、圖標(biāo)、名稱等)
*/publicclassAppEnging{publicstaticListgetAppInfos(Context context){? ? ? ? List list =newArrayList();//獲取應(yīng)用程序信息//包的管理者PackageManager pm = context.getPackageManager();//獲取系統(tǒng)中安裝到所有軟件信息List installedPackages = pm.getInstalledPackages(0);for(PackageInfo packageInfo : installedPackages) {//獲取包名String packageName = packageInfo.packageName;//獲取版本號(hào)String versionName = packageInfo.versionName;//獲取applicationApplicationInfo applicationInfo = packageInfo.applicationInfo;intuid = applicationInfo.uid;//獲取應(yīng)用程序的圖標(biāo)Drawable icon = applicationInfo.loadIcon(pm);//獲取應(yīng)用程序的名稱String name = applicationInfo.loadLabel(pm).toString();//是否是用戶程序//獲取應(yīng)用程序中相關(guān)信息,是否是系統(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{//安裝到手機(jī)中isSD =false;? ? ? ? ? ? }//添加到bean中AppInfo appInfo =newAppInfo(name, icon, packageName, versionName, isSD, isUser);//將bean存放到list集合list.add(appInfo);? ? ? ? }returnlist;? ? }}// 封裝軟件信息的bean類(lèi)classAppInfo{//名稱privateString name;//圖標(biāo)privateDrawable icon;//包名privateString packagName;//版本號(hào)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;? ? }}
判斷當(dāng)前App處于前臺(tái)還是后臺(tái)
// 需添加// 并且必須是系統(tǒng)應(yīng)用該方法才有效/**
* 判斷當(dāng)前App處于前臺(tái)還是后臺(tái)
*/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);// 給白紙?jiān)O(shè)置寬高returnoutMetrics.widthPixels;}/**
* 獲取屏幕的高度px
*/publicstaticintgetDeviceHeight(Context context){? ? WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);? ? DisplayMetrics outMetrics =newDisplayMetrics();// 創(chuàng)建了一張白紙windowManager.getDefaultDisplay().getMetrics(outMetrics);// 給白紙?jiān)O(shè)置寬高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)欄高度+標(biāo)題欄(ActionBar)高度
/**
* 獲取狀態(tài)欄高度+標(biāo)題欄(ActionBar)高度
*/publicstaticintgetTopBarHeight(Activity activity){returnactivity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();}
/**
* 獲取當(dāng)前屏幕截圖纱控,包含狀態(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;}/**
* 獲取當(dāng)前屏幕截圖辆毡,不包含狀態(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;}
設(shè)置透明狀態(tài)欄,需在setContentView之前調(diào)用
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明狀態(tài)欄getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明導(dǎo)航欄getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}// 需在頂部控件布局中加入以下屬性讓內(nèi)容出現(xiàn)在狀態(tài)欄之下android:clipToPadding="true"android:fitsSystemWindows="true"
// 在manifest.xml中activity中設(shè)置android:windowSoftInputMode="stateVisible|adjustResize"
/**
* 動(dòng)態(tài)隱藏軟鍵盤(pán)
*/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);? ? }}/**
* 動(dòng)態(tài)隱藏軟鍵盤(pán)
*/publicstaticvoidhideSoftInput(Context context, EditText edit){? ? edit.clearFocus();? ? InputMethodManager inputmanger = (InputMethodManager) context? ? ? ? ? ? .getSystemService(Context.INPUT_METHOD_SERVICE);? ? inputmanger.hideSoftInputFromWindow(edit.getWindowToken(),0);}
// 方法1:在onTouch中處理甜害,未獲焦點(diǎn)則隱藏/**
* 在onTouch中處理舶掖,未獲焦點(diǎn)則隱藏
*/@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所在坐標(biāo)和用戶點(diǎn)擊的坐標(biāo)相對(duì)比,來(lái)判斷是否隱藏鍵盤(pán)尔店,需重寫(xiě)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所在坐標(biāo)和用戶點(diǎn)擊的坐標(biāo)相對(duì)比访锻,來(lái)判斷是否隱藏鍵盤(pán)
*/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,隱藏軟鍵盤(pán)
*/privatevoidhideKeyboard(IBinder token){if(token !=null) {? ? ? ? InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);? ? ? ? im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);? ? }}
/**
* 動(dòng)態(tài)顯示軟鍵盤(pán)
*/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);}
/**
* 切換鍵盤(pán)顯示與否狀態(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{//驗(yàn)證手機(jī)號(hào)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}$";//驗(yàn)證座機(jī)號(hào),正確格式:xxx/xxxx-xxxxxxx/xxxxxxxxprivatestaticfinalString REGEX_TEL ="^0\\d{2,3}[- ]?\\d{7,8}";//驗(yàn)證郵箱privatestaticfinalString REGEX_EMAIL ="^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";//驗(yàn)證urlprivatestaticfinalString REGEX_URL ="http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";//驗(yàn)證漢字privatestaticfinalString REGEX_CHZ ="^[\\u4e00-\\u9fa5]+$";//驗(yàn)證用戶名,取值范圍為a-z,A-Z,0-9,"_",漢字闹获,不能以"_"結(jié)尾,用戶名必須是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);}
/**
* 獲取服務(wù)是否開(kāi)啟
*/publicstaticbooleanisRunningService(String className, Context context){//進(jìn)程的管理者,活動(dòng)的管理者ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);//獲取正在運(yùn)行的服務(wù)List runningServices = activityManager.getRunningServices(1000);//maxNum 返回正在運(yùn)行的服務(wù)的上限個(gè)數(shù),最多返回多少個(gè)服務(wù)//遍歷集合for(RunningServiceInfo runningServiceInfo : runningServices) {//獲取控件的標(biāo)示ComponentName service = runningServiceInfo.service;//獲取正在運(yùn)行的服務(wù)的全類(lèi)名String className2 = service.getClassName();//將獲取到的正在運(yùn)行的服務(wù)的全類(lèi)名和傳遞過(guò)來(lái)的服務(wù)的全類(lèi)名比較,一直表示服務(wù)正在運(yùn)行? 返回true,不一致表示服務(wù)沒(méi)有運(yùn)行? 返回falseif(className.equals(className2)) {returntrue;? ? ? ? }? ? }returnfalse;}