常用的一些工具類

安卓基礎開發(fā)庫,讓開發(fā)簡單點。
DevRing & Demo地址https://github.com/LJYcoder/DevRing

前言

幾乎每個項目都會有各種各樣的工具類,在開發(fā)中通過它們可更直接方便地實現(xiàn)功能。下面將介紹一些比較常用的工具類,而具體的實現(xiàn)請下載demo查看代碼。


介紹

1. Log打印

demo中提供了RingLog工具類(出自ZhaoKaiQiang),和普通的Log一樣包含Verbose、Debug、Info、Warn、Error、Assert幾個等級,還支持將json或xml文本格式化后輸出。
使用:
1)控制是否打印。正式打包上線時可設為false:

RingLog.init(true);

2)打印

//比如打印Error級日志
RingLog.e(TAG, message);

//將jsonString格式化后打印出來
RingLog.json(TAG, jsonString);

//將xmlString格式化后打印出來
RingLog.xml(TAG, xmlString);

這個Log工具類一個很大的好處是,你可以快速地跟蹤到調用打印的具體位置。如圖:

Log跟蹤1

點擊MoviePresenter即可定位到輸出打印的位置

Log跟蹤2

2. 崩潰打印

demo中提供了CrashDiary工具類,用于在程序崩潰時,輸出異常日志到手機本地文件中,方便在沒連接電腦時查看異常信息。可指定異常信息所輸出的文件(位置)

程序崩潰時,即可到對應的位置下查看異常信息,如圖:


查看崩潰日志1
查看崩潰日志2

3. 手機系統(tǒng)類型

demo中提供了SystemTypeUtil工具類,用于處理與手機系統(tǒng)類型相關的事件。
部分手機的系統(tǒng)是基于原生Android系統(tǒng)改造的(如小米,魅族),所以在有些功能的實現(xiàn)上需要做兼容處理,如設置狀態(tài)欄中圖文的顏色模式、跳轉到權限管理頁面。

  • 判斷手機類型
boolean flag;
flag = SystemTypeUtil.isEMUI();//是否為華為手機
flag = SystemTypeUtil.isMIUI();//是否為小米手機
flag = SystemTypeUtil.isFlyme();//是否為魅族手機
  • 跳轉到權限管理頁面
//跳轉,兼容不同手機系統(tǒng)類型
SystemTypeUtil.goToPermissionManager(context);
  • 設置狀態(tài)欄中圖文的顏色模式(深色模式或亮色模式)
boolean isDark = true;//true表示深色模式,false表示亮色模式
Window window = getWindow();
boolean flag = SystemTypeUtil.setStatusBarLightMode(window, isDark);//返回true表示設置成功

深色模式效果圖:


深色模式

亮色模式效果圖:


亮色模式

4. android 6.0權限申請

android6.0后(targetSdkVersion>=23)對于敏感權限,app需要向用戶提出授權申請。
demo中提供了PermissionManager用于6.0版本的權限申請,使用RxPermisiion實現(xiàn)。

這里說下一般的申請流程:
1)在 AndroidManifest.xml 添加權限聲明。
2)使用 checkSelfPermission 檢查某個權限是否已經(jīng)申請。
3)權限未申請,使用 requestPermissions 申請權限,然后會回調onRequestPermissionsResult。
4)在 onRequestPermissionsResult 回調中判斷權限是否申請成功。
5)如果申請失敗,則使用 shouldShowRequestPermissionRationale 判斷用戶是否勾選了 "不再提醒"。勾選了的話,則彈出一個 Dialog 引導用戶到設置界面授予權限。沒勾選的話,可以什么都不做,也可以彈出彈出一個 Dialog 引導用戶到設置界面授予權限。

5. 網(wǎng)絡狀態(tài)

demo中提供了NetworkUtil工具類,用于查詢網(wǎng)絡狀態(tài)

//當前網(wǎng)絡是否可用,返回true表示可用,false表示不可以用
NetworkUtil.isNetWorkAvailable(context);

//當前網(wǎng)絡是否為wifi網(wǎng)絡,返回true表示是,false表示不是
NetworkUtil.isWifiConnected(context);

//當前網(wǎng)絡是否為手機移動網(wǎng)絡,返回true表示是,false表示不是
NetworkUtil.isMobileConnected(context);

...

6. File相關

demo中提供了FileUtil工具類,用于處理File相關的操作

  • SD卡是否能用
FileUtil.isSDCardAvailable();
  • 創(chuàng)建文件夾
/**
* 創(chuàng)建一個文件夾, 存在則返回, 不存在則新建
*
* @param String parentDirectory 父目錄路徑
* @param String directory  目錄名
* @return 文件,null代表失敗
*/
FileUtil.getDirectory(parentDirectory, directory);

/**
 * 創(chuàng)建一個文件夾, 存在則返回, 不存在則新建
 *
 * @param File parentDirectory 父目錄
 * @param String directory  目錄名
 * @return 文件,null代表失敗
 */
 FileUtil.getDirectory(parentDirectory, directory)
  • 創(chuàng)建文件
/**
 * 創(chuàng)建一個文件, 存在則返回, 不存在則新建
 *
 * @param File catalog 父目錄
 * @param String name    文件名
 * @return 文件,null代表失敗
 */
 FileUtil.getFile(catalog, name);

/**
* 根據(jù)全路徑創(chuàng)建一個文件
*
* @param filePath 文件全路徑
* @return 文件,null代表失敗
*/
FileUtil.getFile(filePath);
  • 刪除文件
/**
* 刪除文件/文件夾
* 如果是文件夾,則會刪除其下的文件以及它本身
* @param file file
* @return true代表成功刪除
*/
FileUtil.deleteFile(file);
  • 計算文件大小
/**
 * 計算文件/文件夾的大小
 * @param file 文件或文件夾
 * @return long 文件大小
 */
FileUtil.calculateFileSize(file);
  • 獲取系統(tǒng)提供的文件夾路徑
//返回"/data"目錄
FileUtil.getDataDirectory();

//返回"/storage/emulated/0"目錄
FileUtil.getExternalStorageDirectory();

//返回"/system"目錄
FileUtil.getRootDirectory();

//返回"/cache"目錄
FileUtil.getDownloadCacheDirectory();

//返回"/data/user/0/com.xxx.xxx/cache"目錄
FileUtil.getCacheDir();

//返回"/data/user/0/com.xxx.xxx/files"目錄
FileUtil.getFilesDir();

//返回"/storage/emulated/0/Android/data/com.xxx.xxx/cache"目錄
FileUtil.getExternalCacheDir();

/**
 * @param String type 所放的文件的類型,傳入的參數(shù)是Environment類中的DIRECTORY_XXX靜態(tài)變量
 * @return 返回"/storage/emulated/0/xxx"目錄
 *         例如傳入Environment.DIRECTORY_ALARMS則返回"/storage/emulated/0/Alarms"
 */
FileUtil.getExternalStoragePublicDirectory(type);

/**
 * @param String type 所放的文件的類型,傳入的參數(shù)是Environment類中的DIRECTORY_XXX靜態(tài)變量
 * @return  返回"/storage/emulated/0/Android/data/com.xxx.xxx/files/Alarms"目錄
 *          例如傳入Environment.DIRECTORY_ALARMS則返回"/storage/emulated/0/Android/data/com.xxx.xxx/files/Alarms"
 */
FileUtil.getExternalFilesDir(type);

7. Activity棧管理

demo中提供了ActivityStackManager工具類,用于存放管理Activity棧。
使用流程:
1.在activity創(chuàng)建時調用pushOneActivity(Activity activity)推入棧,可放于Activity基類中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mStackManager = ActivityStackManager.getInstance();
    mStackManager.pushOneActivity(this);
}

2.在activity銷毀時調用popOneActivity(Activity activity)彈出棧,可放于Activity基類中

@Override
protected void onDestroy() {
    mStackManager.popOneActivity(this);
    super.onDestroy();
}

3.當你想要退出某個Activity時,可調用exitActivity(Class cls)

mStackManager.exitActivity(CollectActivity.class);

4.當你想要退出整個應用(所有Activity)時,可調用exitApplication()

mStackManager.exitApplication();

還提供了其他方法,具體請查看demo代碼

8. 緩存

demo中提供了CacheManager,里面提供了內存緩存、磁盤緩存、SharedPreferences緩存。 其中磁盤緩存可定制緩存時長、位置、大小。
使用方法就是拿到相關的緩存管理,然后進行put和get操作。

9. Toast

demo中提供了RingToast工具類,方便吐司。
使用流程
1.Application中初始化

RingToast.init(this);//初始化吐司

2.在要吐司的地方調用show

RingToast.show("hello world");

RingToast.show(R.string.appName);

10. 密度單位轉換

demo提供了DensityUtil工具類,用于密度單位的轉換

  • px轉dp
int dp = DensityUtil.px2dp(context, px);
  • dp轉px
int px = DensityUtil.dp2px(context, dp);
  • sp轉px
int px = DensityUtil.sp2px(context, sp);
  • px轉sp
int sp = DensityUtil.px2sp(context, px);

11. ImageUtil

demo中提供了圖片工具類,用于對圖片進行壓縮(比例壓縮或質量壓縮)、跳轉到相機/相冊、對Bitmap做高斯模糊處理等。

//從相機獲取圖片
ImageUtil.getImageFromCamera(context, mPhotoUri);
//從相冊獲取圖片
ImageUtil.getImageFromAlbums(context);
//裁減圖片為500*500尺寸,并且壓縮圖片為不大于3M的大小
bitmap = ImageUtil.qualityCompress(ImageUtil.scaleCompress(mFilePath, 500, 500), 3 * 1024);
...

12. 加密

demo中提供了EncryptUtil工具類,用于md5加密和sha1加密。

  • md5加密
String encrpt = EncryptUtil.md5Crypt(password.getBytes());
//加鹽值
String encrpt = EncryptUtil.md5Crypt(password.getBytes(),salt);
  • sha1加密
String encrpt = EncryptUtil.sha1Crypt(password.getBytes());
//加鹽值
String encrpt = EncryptUtil.sha1Crypt(password.getBytes(),salt);

13. 狀態(tài)欄/導航欄顏色

提供了ColorBar工具類,用于沉浸式狀態(tài)欄實現(xiàn),來自https://github.com/Zackratos/UltimateBar,具體用法到里面查閱。

14. 其他

demo中還提供了一個CommonUtil,負責一些比較雜碎的功能,例如

  • 獲取設備唯一ID號
String deviceId = CommonUtil.getDeviceUniqueId(context);
  • 創(chuàng)建/刪除桌面快捷方式
//創(chuàng)建
CommonUtil.creatShortcut(context);
//刪除
CommonUtil.delShortcut(context);
  • 擴展View的觸摸范圍
//擴大view上下左右10個單位觸摸的范圍
CommonUtil.expandViewTouchDelegate(view,10,10,10,10);
  • ...

另外,BlankJ提供了一個各種工具類的開源項目,大家各取所需吧。
https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,292評論 25 708
  • 安卓基礎開發(fā)庫,讓開發(fā)簡單點。DevRing & Demo地址:https://github.com/LJYcod...
    JYcoder閱讀 4,502評論 2 17
  • 安卓基礎開發(fā)庫,讓開發(fā)簡單點。DevRing & Demo地址:https://github.com/LJYcod...
    JYcoder閱讀 36,347評論 7 115
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,924評論 18 139
  • 嘿嘿,在這個春暖花開的季節(jié)里,最重要的是什么,出去浪呀~!爬山,騎車,跑步,各個都要來一發(fā)才不辜負了滿園春光。 然...
    靜靜安靜的爐閱讀 195評論 0 1