安卓开发框架(MVP+主流框架+基类+工具类)--- 工具类

来源:互联网 发布:c语言graphics 编辑:程序博客网 时间:2024/05/20 22:27

前言

几乎每个项目都会有各种各样的工具类,在开发中通过它们可更直接方便地实现功能。下面将介绍demo中各个工具类的使用,而具体的实现请下载demo查看代码。


介绍

1. Log打印

demo中提供了LogUtil工具类(出自是ZhaoKaiQiang),和普通的Log一样包含Verbose、Debug、Info、Warn、Error、Assert几个等级,还支持将json或xml文本格式化后输出。
使用:
1)控制是否打印。正式打包上线时可设为false:

LogUtil.init(true);

2)打印

//比如打印Error级日志LogUtil.e(TAG, message);//将jsonString格式化后打印出来LogUtil.json(TAG, jsonString);//将xmlString格式化后打印出来LogUtil.xml(TAG, xmlString);

这个Log工具类一个很大的好处是,你可以快速地跟踪到调用打印的具体位置。如图:
Log跟踪1

点击MoviePresenter即可定位到输出打印的位置

Log跟踪2

2. 崩溃打印

demo中提供了CrashLogUtil工具类,用于在程序崩溃时,输出异常日志到手机本地文件中,方便在没连接电脑时查看异常信息。
使用方法:
1.Application中初始化

CrashLogUtil.getInstance().init(this);//初始化崩溃打印

2.可指定异常信息所输出的文件(位置)

File dirTemp = FileUtil.generateDirectory(FileUtil.getExternalCacheDir(), "temp");File fileOutput = FileUtil.generateFile(dirTemp, fileName);//指定输出文件CrashLogUtil.getInstance().setFileOutput(fileOutput);

不指定的话,文件默认就保存在/storage/emulated/0/Android/data/com.xxx.xxx/cache/temp下。
程序崩溃时,即可到对应的位置下查看异常信息,如图:
查看崩溃日志1

查看崩溃日志2

3. 手机系统类型

demo中提供了SystemTypeUtil工具类,用于处理与手机系统类型相关的事件。
部分手机的系统是基于原生Android系统改造的(如小米,魅族),所以在有些功能的实现上需要做兼容处理,如设置状态栏中图文的颜色模式、跳转到权限管理页面。

  • 判断手机类型
boolean flag;flag = SystemTypeUtil.isEMUI();//是否为华为手机flag = SystemTypeUtil.isMIUI();//是否为小米手机flag = SystemTypeUtil.isFlyme();//是否为魅族手机
  • 跳转到权限管理页面
//跳转,兼容不同手机系统类型SystemTypeUtil.goToPermissionManager(context);
  • 设置状态栏中图文的颜色模式(深色模式或亮色模式)
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中提供了一个比较简单PermissionUtil工具类,用于6.0版本的权限申请。github上有不少高star的6.0权限开源库,大家可以自行查阅。

这里说下一般的申请流程:
1)在 AndroidManifest.xml 添加权限声明。
2)使用 checkSelfPermission 检查某个权限是否已经申请。
3)权限未申请,使用 requestPermissions 申请权限,然后会回调onRequestPermissionsResult。
4)在 onRequestPermissionsResult 回调中判断权限是否申请成功。
5)如果申请失败,则使用 shouldShowRequestPermissionRationale 判断用户是否勾选了 “不再提醒”。勾选了的话,则弹出一个 Dialog 引导用户到设置界面授予权限。没勾选的话,可以什么都不做,也可以弹出弹出一个 Dialog 引导用户到设置界面授予权限。

5. 网络状态

demo中提供了NetworkUtil工具类,用于查询网络状态

//当前网络是否可用,返回true表示可用,false表示不可以用NetworkUtil.isNetWorkAvailable(context);//当前网络是否为wifi网络,返回true表示是,false表示不是NetworkUtil.isWifiConnected(context);//当前网络是否为手机移动网络,返回true表示是,false表示不是NetworkUtil.isMobileConnected(context);...

6. File相关

demo中提供了FileUtil工具类,用于处理File相关的操作

  • SD卡是否能用
FileUtil.isSDCardAvailable();
  • 创建文件夹
/*** 创建一个文件夹, 存在则返回, 不存在则新建** @param String parentDirectory 父目录路径* @param String directory  目录名* @return 文件,null代表失败*/FileUtil.generateDirectory(parentDirectory, directory);/** * 创建一个文件夹, 存在则返回, 不存在则新建 * * @param File parentDirectory 父目录 * @param String directory  目录名 * @return 文件,null代表失败 */ FileUtil.generateDirectory(parentDirectory, directory)
  • 创建文件
/** * 创建一个文件, 存在则返回, 不存在则新建 * * @param File catalog 父目录 * @param String name    文件名 * @return 文件,null代表失败 */ FileUtil.generateFile(catalog, name);/*** 根据全路径创建一个文件** @param filePath 文件全路径* @return 文件,null代表失败*/FileUtil.generateFile(filePath);
  • 删除文件
/*** 删除文件/文件夹* 如果是文件夹,则会删除其下的文件以及它本身* @param file file* @return true代表成功删除*/FileUtil.deleteFile(file);
  • 计算文件大小
/** * 计算文件/文件夹的大小 * @param file 文件或文件夹 * @return long 文件大小 */FileUtil.calculateFileSize(file);
  • 获取系统提供的文件夹路径
//返回"/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 所放的文件的类型,传入的参数是Environment类中的DIRECTORY_XXX静态变量 * @return 返回"/storage/emulated/0/xxx"目录 *         例如传入Environment.DIRECTORY_ALARMS则返回"/storage/emulated/0/Alarms" */FileUtil.getExternalStoragePublicDirectory(type);/** * @param String type 所放的文件的类型,传入的参数是Environment类中的DIRECTORY_XXX静态变量 * @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创建时调用pushOneActivity(Activity activity)推入栈,可放于Activity基类中

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

2.在activity销毁时调用popOneActivity(Activity activity)弹出栈,可放于Activity基类中

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

3.当你想要退出某个Activity时,可调用exitActivity(Class cls)

mStackManager.exitActivity(CollectActivity.class);

4.当你想要退出整个应用(所有Activity)时,可调用exitApplication()

mStackManager.exitApplication();

还提供了其他方法,具体请查看demo代码

8. SharedPreferences

demo中提供了PreferenceUtil工具类,用于SharedPreferences的数据插入、读取等操作。

  • 获取SharedPreferences
SharedPreferences sp = PreferenceUtil.getPreference(context, spName);
  • 插入数据
//int类型PreferenceUtil.putInt(sp, key, value);//String类型PreferenceUtil.putString(sp, key, value);//boolean类型PreferenceUtil.putBoolean(sp, key, value);//float类型PreferenceUtil.putFloat(sp, key, value);//long类型PreferenceUtil.putLong(sp, key, value);
  • 读取数据
//int类型PreferenceUtil.getInt(sp, key, defaultValue);//String类型PreferenceUtil.getString(sp, key, defaultValue);//boolean类型PreferenceUtil.getBoolean(sp, key, defaultValue);//float类型PreferenceUtil.getFloat(sp, key, defaultValue);//long类型PreferenceUtil.getLong(sp, key, defaultValue);//读取所有数据,返回MapPreferenceUtil.getAll(sp);
  • 清空数据
PreferenceUtil.clearAll(sp);

9. Toast

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

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

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

ToastUtil.show("hello world");ToastUtil.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. 高斯模糊

demo中提供了BlurUtil工具类,用于对Bitmap做高斯模糊处理,可以选用Java原生方式和RenderScript方式。
- Java原生方式

//使用Java实现的高斯模糊效果(性能较低,模糊半径0-100,越大越模糊)Bitmap bitmapAfter = BlurUtil.javaBlur(bitmapBefore, 15, true);
  • RenderScript方式
/*** 使用RenderScript实现的高斯模糊效果(性能较高,模糊半径0-25,越大越模糊)* 需在module下的build.gradle中加入* renderscriptTargetApi 19* renderscriptSupportModeEnabled true*/Bitmap bitmapAfter = BlurUtil.rsBlur(MyApplication.getInstance(), bitmapBefore, 15);

高斯模糊效果

12. 加密

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

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

13. 其他

demo中还提供了一个CommonUtil,负责一些比较杂碎的功能,例如

  • 获取设备唯一ID号
String deviceId = CommonUtil.getDeviceUniqueId(context);
  • 创建/删除桌面快捷方式
//创建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


详细代码请看demo,地址:https://github.com/LJYcoder/DevBase
demo的内容流程,请看《安卓开发框架(MVP+主流框架+基类+工具类)— 开篇》

阅读全文
1 0
原创粉丝点击