AndroidUtils Android開發不得不收藏的Utils
之前寫這篇文章主要是專案應用到的Utils,發現已經有一個更全面的開源庫總結,所以還是非常震驚可以總結的這麼全面,在此我準備重新梳理一遍~
AndroidUtils:Android必備utilCode
具體Demo使用參考開源github:AndroidUtilCode。本文只是稍微記錄下方便自己查閱。
Activity相關→ActivityUtils.java
**
App相關→AppUtils.java
狀態列相關→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();
}
}
}複製程式碼