《安卓开发框架》系列文章
>>>

前言

几每个门类都见面来各式各样的家伙类,在开中经其可是还直白惠及地实现力量。下面用介绍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基类中

@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. 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);

//读取所有数据,返回Map
PreferenceUtil.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+主流框架+基类+工具类)—
开篇》

相关文章

网站地图xml地图