做者:小小程序員jh
連接:https://www.jianshu.com/p/eba...java
AndroidUtils Android開發不得不收藏的Utils
以前寫這篇文章主要是項目應用到的Utils,發現已經有一個更全面的開源庫總結,因此仍是很是震驚能夠總結的這麼全面,在此我準備從新梳理一遍~
AndroidUtils:Android必備utilCodeandroid
具體Demo使用參考開源github:AndroidUtilCode。本文只是稍微記錄下方便本身查閱。git
Activity相關→ActivityUtils.java**程序員
App相關→AppUtils.javagithub
狀態欄相關→BarUtils.java面試
清除相關→CleanUtils.java正則表達式
剪貼板相關→ClipboardUtils.java小程序
關閉相關→CloseUtils.java數組
常量相關→ConstUtils.java安全
轉換相關→ConvertUtils.java
崩潰相關→CrashUtils.java
設備相關→DeviceUtils.java
判空相關→EmptyUtils.java
編碼解碼相關→EncodeUtils.java
加密解密相關→EncryptUtils.java
encryptMD2, encryptMD2ToString : MD2加密 encryptMD5, encryptMD5ToString : MD5加密 encryptMD5File, encryptMD5File2String : MD5加密文件 encryptSHA1, encryptSHA1ToString : SHA1加密 encryptSHA224, encryptSHA224ToString : SHA224加密 encryptSHA256, encryptSHA256ToString : SHA256加密 encryptSHA384, encryptSHA384ToString : SHA384加密 encryptSHA512, encryptSHA512ToString : SHA512加密 encryptHmacMD5, encryptHmacMD5ToString : HmacMD5加密 encryptHmacSHA1, encryptHmacSHA1ToString : HmacSHA1加密 encryptHmacSHA224, encryptHmacSHA224ToString : HmacSHA224加密 encryptHmacSHA256, encryptHmacSHA256ToString : HmacSHA256加密 encryptHmacSHA384, encryptHmacSHA384ToString : HmacSHA384加密 encryptHmacSHA512, encryptHmacSHA512ToString : HmacSHA512加密 encryptDES, encryptDES2HexString, encryptDES2Base64 : DES加密 decryptDES, decryptHexStringDES, decryptBase64DES : DES解密 encrypt3DES, encrypt3DES2HexString, encrypt3DES2Base64: 3DES加密 decrypt3DES, decryptHexString3DES, decryptBase64_3DES : 3DES解密 encryptAES, encryptAES2HexString, encryptAES2Base64 : AES加密 decryptAES, decryptHexStringAES, decryptBase64AES : AES解密
文件相關→FileUtils.java
getFileByPath : 根據文件路徑獲取文件 isFileExists : 判斷文件是否存在 rename : 重命名文件 isDir : 判斷是不是目錄 isFile : 判斷是不是文件 createOrExistsDir : 判斷目錄是否存在,不存在則判斷是否建立成功 createOrExistsFile : 判斷文件是否存在,不存在則判斷是否建立成功 createFileByDeleteOldFile: 判斷文件是否存在,存在則在建立以前刪除 copyDir : 複製目錄 copyFile : 複製文件 moveDir : 移動目錄 moveFile : 移動文件 deleteDir : 刪除目錄 deleteFile : 刪除文件 listFilesInDir : 獲取目錄下全部文件 listFilesInDir : 獲取目錄下全部文件包括子目錄 listFilesInDirWithFilter : 獲取目錄下全部後綴名爲suffix的文件 listFilesInDirWithFilter : 獲取目錄下全部後綴名爲suffix的文件包括子目錄 listFilesInDirWithFilter : 獲取目錄下全部符合filter的文件 listFilesInDirWithFilter : 獲取目錄下全部符合filter的文件包括子目錄 searchFileInDir : 獲取目錄下指定文件名的文件包括子目錄 writeFileFromIS : 將輸入流寫入文件 writeFileFromString : 將字符串寫入文件 readFile2List : 指定編碼按行讀取文件到鏈表中 readFile2String : 指定編碼按行讀取文件到字符串中 readFile2Bytes : 讀取文件到字符數組中 getFileLastModified : 獲取文件最後修改的毫秒時間戳 getFileCharsetSimple : 簡單獲取文件編碼格式 getFileLines : 獲取文件行數 getDirSize : 獲取目錄大小 getFileSize : 獲取文件大小 getDirLength : 獲取目錄長度 getFileLength : 獲取文件長度 getFileMD5 : 獲取文件的MD5校驗碼 getFileMD5ToString : 獲取文件的MD5校驗碼 getDirName : 根據全路徑獲取最長目錄 getFileName : 根據全路徑獲取文件名 getFileNameNoExtension : 根據全路徑獲取文件名不帶拓展名 getFileExtension : 根據全路徑獲取文件拓展名
Handler相關→HandlerUtils.java
防止內存泄露Handler(匿名內部類)持有外部類的引用
圖片相關→ImageUtils.java
bitmap2Bytes, bytes2Bitmap : bitmap與byteArr互轉 drawable2Bitmap, bitmap2Drawable: drawable與bitmap互轉 drawable2Bytes, bytes2Drawable : drawable與byteArr互轉 getBitmap : 獲取bitmap scale : 縮放圖片 clip : 裁剪圖片 skew : 傾斜圖片 rotate : 旋轉圖片 getRotateDegree : 獲取圖片旋轉角度 toRound : 轉爲圓形圖片 toRoundCorner : 轉爲圓角圖片 fastBlur : 快速模糊 renderScriptBlur : renderScript模糊圖片 stackBlur : stack模糊圖片 addFrame : 添加顏色邊框 addReflection : 添加倒影 addTextWatermark : 添加文字水印 addImageWatermark : 添加圖片水印 toAlpha : 轉爲alpha位圖 toGray : 轉爲灰度圖片 save : 保存圖片 isImage : 根據文件名判斷文件是否爲圖片 getImageType : 獲取圖片類型 compressByScale : 按縮放壓縮 compressByQuality : 按質量壓縮 compressBySampleSize : 按採樣大小壓縮
意圖相關→IntentUtils.java
getInstallAppIntent : 獲取安裝App(支持6.0)的意圖 getUninstallAppIntent : 獲取卸載App的意圖 getLaunchAppIntent : 獲取打開App的意圖 getAppDetailsSettingsIntent: 獲取App具體設置的意圖 getShareTextIntent : 獲取分享文本的意圖 getShareImageIntent : 獲取分享圖片的意圖 getComponentIntent : 獲取其餘應用組件的意圖 getShutdownIntent : 獲取關機的意圖 getCaptureIntent : 獲取拍照的意圖
鍵盤相關→KeyboardUtils.java
hideSoftInput : 動態隱藏軟鍵盤 clickBlankArea2HideSoftInput: 點擊屏幕空白區域隱藏軟鍵盤 showSoftInput : 動態顯示軟鍵盤 toggleSoftInput : 切換鍵盤顯示與否狀態
定位相關→LocationUtils.java
isGpsEnabled : 判斷Gps是否可用 isLocationEnabled: 判判定位是否可用 openGpsSettings : 打開Gps設置界面 register : 註冊 unregister : 註銷 getAddress : 根據經緯度獲取地理位置 getCountryName : 根據經緯度獲取所在國家 getLocality : 根據經緯度獲取所在地 getStreet : 根據經緯度獲取所在街道
日誌相關→LogUtils.java
init : 初始化函數 getBuilder: 獲取LogUtils建造者 v : Verbose日誌 d : Debug日誌 i : Info日誌 w : Warn日誌 e : Error日誌
網絡相關→NetworkUtils.java
openWirelessSettings : 打開網絡設置界面 isConnected : 判斷網絡是否鏈接 isAvailableByPing : 判斷網絡是否可用 getDataEnabled : 判斷移動數據是否打開 setDataEnabled : 打開或關閉移動數據 is4G : 判斷網絡是不是4G getWifiEnabled : 判斷wifi是否打開 setWifiEnabled : 打開或關閉wifi isWifiConnected : 判斷wifi是否鏈接狀態 isWifiAvailable : 判斷wifi數據是否可用 getNetworkOperatorName: 獲取移動網絡運營商名稱 getNetworkType : 獲取當前網絡類型 getIPAddress : 獲取IP地址 getDomainAddress : 獲取域名ip地址
手機相關→PhoneUtils.java
isPhone : 判斷設備是不是手機 getIMEI : 獲取IMEI碼 getIMSI : 獲取IMSI碼 getPhoneType : 獲取移動終端類型 isSimCardReady : 判斷sim卡是否準備好 getSimOperatorName : 獲取Sim卡運營商名稱 getSimOperatorByMnc: 獲取Sim卡運營商名稱 getPhoneStatus : 獲取手機狀態信息 dial : 跳至撥號界面 call : 撥打phoneNumber sendSms : 跳至發送短信界面 sendSmsSilent : 發送短信 getAllContactInfo : 獲取手機聯繫人 getContactNum : 打開手機聯繫人界面點擊聯繫人後便獲取該號碼 getAllSMS : 獲取手機短信並保存到xml中
拼音相關→PinyinUtils.java
ccs2Pinyin : 漢字轉拼音 ccs2Pinyin : 漢字轉拼音 getPinyinFirstLetter : 獲取第一個漢字首字母 getPinyinFirstLetters: 獲取全部漢字的首字母 getSurnamePinyin : 根據名字獲取姓氏的拼音 getSurnameFirstLetter: 根據名字獲取姓氏的首字母
進程相關→ProcessUtils.java
getForegroundProcessName : 獲取前臺線程包名 killAllBackgroundProcesses: 殺死全部的後臺服務進程 killBackgroundProcesses : 殺死後臺服務進程
正則相關→RegexUtils.java
isMobileSimple : 驗證手機號(簡單) isMobileExact : 驗證手機號(精確) isTel : 驗證電話號碼 isIDCard15 : 驗證身份證號碼15位 isIDCard18 : 驗證身份證號碼18位 isEmail : 驗證郵箱 isURL : 驗證URL isZh : 驗證漢字 isUsername : 驗證用戶名 isDate : 驗證yyyy-MM-dd格式的日期校驗,已考慮平閏年 isIP : 驗證IP地址 isMatch : 判斷是否匹配正則 getMatches : 獲取正則匹配的部分 getSplits : 獲取正則匹配分組 getReplaceFirst: 替換正則匹配的第一部分 getReplaceAll : 替換全部正則匹配的部分
屏幕相關→ScreenUtils.java
getScreenWidth : 獲取屏幕的寬度(單位:px) getScreenHeight : 獲取屏幕的高度(單位:px) setLandscape : 設置屏幕爲橫屏 setPortrait : 設置屏幕爲豎屏 isLandscape : 判斷是否橫屏 isPortrait : 判斷是否豎屏 getScreenRotation : 獲取屏幕旋轉角度 captureWithStatusBar : 獲取當前屏幕截圖,包含狀態欄 captureWithoutStatusBar: 獲取當前屏幕截圖,不包含狀態欄 isScreenLock : 判斷是否鎖屏
SD卡相關→SDCardUtils.java
isSDCardEnable: 判斷SD卡是否可用 getSDCardPath : 獲取SD卡路徑 getDataPath : 獲取SD卡Data路徑 getFreeSpace : 計算SD卡的剩餘空間 getSDCardInfo : 獲取SD卡信息
服務相關→ServiceUtils.java
getAllRunningService: 獲取全部運行的服務 startService : 啓動服務 stopService : 中止服務 bindService : 綁定服務 unbindService : 解綁服務 isServiceRunning : 判斷服務是否運行
Shell相關→ShellUtils.java
execCmd: 是不是在root下執行命令
尺寸相關→SizeUtils.java
dp2px, px2dp : dp與px轉換 sp2px, px2sp : sp與px轉換 applyDimension : 各類單位轉換 forceGetViewSize : 在onCreate中獲取視圖的尺寸 measureView : 測量視圖尺寸 getMeasuredWidth : 獲取測量視圖寬度 getMeasuredHeight: 獲取測量視圖高度
Snackbar相關→SnackbarUtils.java
showShortSnackbar : 顯示短時snackbar showLongSnackbar : 顯示長時snackbar showIndefiniteSnackbar: 顯示自定義時長snackbar addView : 爲SnackBar添加布局 dismissSnackbar : 取消snackbar顯示
SpannableString相關工具類→SpannableStringUtils.java
getBuilder : 獲取建造者 setFlag : 設置標識 setForegroundColor: 設置前景色 setBackgroundColor: 設置背景色 setQuoteColor : 設置引用線的顏色 setLeadingMargin : 設置縮進 setBullet : 設置列表標記 setProportion : 設置字體比例 setXProportion : 設置字體橫向比例 setStrikethrough : 設置刪除線 setUnderline : 設置下劃線 setSuperscript : 設置上標 setSubscript : 設置下標 setBold : 設置粗體 setItalic : 設置斜體 setBoldItalic : 設置粗斜體 setFontFamily : 設置字體 setAlign : 設置對齊 setBitmap : 設置圖片 setDrawable : 設置圖片 setUri : 設置圖片 setResourceId : 設置圖片 setClickSpan : 設置點擊事件 setUrl : 設置超連接 setBlur : 設置模糊 append : 追加樣式字符串 create : 建立樣式字符串
SP相關→SPUtils.java
SPUtils : SPUtils構造函數 putString : SP中寫入String類型value getString : SP中讀取String putInt : SP中寫入int類型value getInt : SP中讀取int putLong : SP中寫入long類型value getLong : SP中讀取long putFloat : SP中寫入float類型value getFloat : SP中讀取float putBoolean: SP中寫入boolean類型value getBoolean: SP中讀取boolean getAll : SP中獲取全部鍵值對 remove : SP中移除該key contains : SP中是否存在該key clear : SP中清除全部數據
字符串相關→StringUtils.java
isEmpty : 判斷字符串是否爲null或長度爲0 isSpace : 判斷字符串是否爲null或全爲空格 equals : 判斷兩字符串是否相等 equalsIgnoreCase: 判斷兩字符串忽略大小寫是否相等 null2Length0 : null轉爲長度爲0的字符串 length : 返回字符串長度 upperFirstLetter: 首字母大寫 lowerFirstLetter: 首字母小寫 reverse : 反轉字符串 toDBC : 轉化爲半角字符 toSBC : 轉化爲全角字符
線程池相關→ThreadPoolUtils.java
ThreadPoolUtils : ThreadPoolUtils構造函數 execute : 在將來某個時間執行給定的命令 execute : 在將來某個時間執行給定的命令鏈表 shutDown : 待之前提交的任務執行完畢後關閉線程池 shutDownNow : 試圖中止全部正在執行的活動任務 isShutDown : 判斷線程池是否已關閉 isTerminated : 關閉線程池後判斷全部任務是否都已完成 awaitTermination : 請求關閉、發生超時或者當前線程中斷 submit : 提交一個Callable任務用於執行 submit : 提交一個Runnable任務用於執行 invokeAll, invokeAny : 執行給定的任務 schedule : 延遲執行Runnable命令 schedule : 延遲執行Callable命令 scheduleWithFixedRate : 延遲並循環執行命令 scheduleWithFixedDelay: 延遲並以固定休息時間循環執行命令
時間相關→TimeUtils.java
millis2String : 將時間戳轉爲時間字符串 string2Millis : 將時間字符串轉爲時間戳 string2Date : 將時間字符串轉爲Date類型 date2String : 將Date類型轉爲時間字符串 date2Millis : 將Date類型轉爲時間戳 millis2Date : 將時間戳轉爲Date類型 getTimeSpan : 獲取兩個時間差(單位:unit) getFitTimeSpan : 獲取合適型兩個時間差 getNowTimeMills : 獲取當前毫秒時間戳 getNowTimeString : 獲取當前時間字符串 getNowTimeDate : 獲取當前Date getTimeSpanByNow : 獲取與當前時間的差(單位:unit) getFitTimeSpanByNow : 獲取合適型與當前時間的差 getFriendlyTimeSpanByNow: 獲取友好型與當前時間的差 isSameDay : 判斷是否同一天 isLeapYear : 判斷是否閏年 getWeek, getWeekIndex : 獲取星期 getWeekOfMonth : 獲取月份中的第幾周 getWeekOfYear : 獲取年份中的第幾周 getChineseZodiac : 獲取生肖 getZodiac : 獲取星座
吐司相關→ToastUtils.java
init : 吐司初始化 showShortToastSafe: 安全地顯示短時吐司 showLongToastSafe : 安全地顯示長時吐司 showShortToast : 顯示短時吐司 showLongToast : 顯示長時吐司 cancelToast : 取消吐司顯示
壓縮相關→ZipUtils.java→Test
zipFiles : 批量壓縮文件 zipFile : 壓縮文件 unzipFiles : 批量解壓文件 unzipFile : 解壓文件 unzipFileByKeyword: 解壓帶有關鍵字的文件 getFilesPath : 獲取壓縮文件中的文件路徑鏈表 getComments : 獲取壓縮文件中的註釋鏈表 getEntries : 獲取壓縮文件中的文件對象
1.判斷手機格式(正則表達式)
public static Boolean isPhone(String str) { String regex = "^1[3|4|5|7|8]\\d{9}$"; return match(regex, str); } private static boolean match(String regex, String str) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); return matcher.matches(); } //代碼調用:
2.dp-px;px-dp
/** * 根據手機的分辨率從 dp 的單位 轉成爲 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 根據手機的分辨率從 px(像素) 的單位 轉成爲 dp */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); }
3. 網絡判斷 2G - 3G - 4G -wifi
/** * Created by ziyang on 16/12/14. * Version 1.0 */ public class NetWorkHelper { /** * 沒有網絡 */ public static final int NETWORKTYPE_INVALID = 0; /** * wap網絡 */ public static final int NETWORKTYPE_WAP = 1; /** * 2G網絡 */ public static final int NETWORKTYPE_2G = 2; /** * 3G和3G以上網絡,或統稱爲快速網絡 */ public static final int NETWORKTYPE_3G = 3; /** * wifi網絡 */ public static final int NETWORKTYPE_WIFI = 4; private static boolean isFastMobileNetwork(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); switch (telephonyManager.getNetworkType()) { case TelephonyManager.NETWORK_TYPE_1xRTT: return false; // ~ 50-100 kbps case TelephonyManager.NETWORK_TYPE_CDMA: return false; // ~ 14-64 kbps case TelephonyManager.NETWORK_TYPE_EDGE: return false; // ~ 50-100 kbps case TelephonyManager.NETWORK_TYPE_EVDO_0: return true; // ~ 400-1000 kbps case TelephonyManager.NETWORK_TYPE_EVDO_A: return true; // ~ 600-1400 kbps case TelephonyManager.NETWORK_TYPE_GPRS: return false; // ~ 100 kbps case TelephonyManager.NETWORK_TYPE_HSDPA: return true; // ~ 2-14 Mbps case TelephonyManager.NETWORK_TYPE_HSPA: return true; // ~ 700-1700 kbps case TelephonyManager.NETWORK_TYPE_HSUPA: return true; // ~ 1-23 Mbps case TelephonyManager.NETWORK_TYPE_UMTS: return true; // ~ 400-7000 kbps case TelephonyManager.NETWORK_TYPE_EHRPD: return true; // ~ 1-2 Mbps case TelephonyManager.NETWORK_TYPE_EVDO_B: return true; // ~ 5 Mbps case TelephonyManager.NETWORK_TYPE_HSPAP: return true; // ~ 10-20 Mbps case TelephonyManager.NETWORK_TYPE_IDEN: return false; // ~25 kbps case TelephonyManager.NETWORK_TYPE_LTE: return true; // ~ 10+ Mbps case TelephonyManager.NETWORK_TYPE_UNKNOWN: return false; default: return false; } } /** * 獲取網絡狀態,wifi,wap,2g,3g. * * @param context 上下文 * @return int 網絡狀態 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G}, * *{@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}* * <p>{@link #NETWORKTYPE_WIFI} */ public static int getNetWorkType(Context context) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { String type = networkInfo.getTypeName(); if (type.equalsIgnoreCase("WIFI")) { return NETWORKTYPE_WIFI; } else if (type.equalsIgnoreCase("MOBILE")) { String proxyHost = android.net.Proxy.getDefaultHost(); return TextUtils.isEmpty(proxyHost) ? (isFastMobileNetwork(context) ? NETWORKTYPE_3G : NETWORKTYPE_2G) : NETWORKTYPE_WAP; } } else { return NETWORKTYPE_INVALID; } return NETWORKTYPE_INVALID; } public static boolean isNetWorkConn(Context context) { return getNetWorkType(context) != 0; } }
4.LogUtils.java debug,release no log,固然能夠添加更詳細的好比添加時間,msg等等
/** * LogUtils log工具類 * @author ziyang */ public class LogUtils { public static boolean isDebug = BuildConfig.LOG_DEBUG; // 下面是傳入自定義tag的函數 public static void i(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void d(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void e(String tag, String msg) { if (isDebug) Log.i(tag, msg); } public static void v(String tag, String msg) { if (isDebug) Log.i(tag, msg); } } //在app build.gradle配置 buildTypes { debug { buildConfigField "boolean", "LOG_DEBUG", "true" minifyEnabled false zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //signingConfig signingConfigs.debug } release { buildConfigField "boolean", "LOG_DEBUG", "false" minifyEnabled false zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
5.MyToast.java固然能夠拓展,時間控制,content內容控制等等
public class MyToast extends Toast { private Toast mToast; public MyToast(Context context) { super(context); } public void showToast(String text, Context mContext) { if (mToast == null) { mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT); } else { mToast.setText(text); mToast.setDuration(Toast.LENGTH_SHORT); } mToast.show(); } public void cancelToast() { if (mToast != null) { mToast.cancel(); } } }