常用的一些工具类

作者: JYcoder | 来源:发表于2017-10-27 15:48 被阅读666次

    安卓基础开发库,让开发简单点。
    DevRing & Demo地址https://github.com/LJYcoder/DevRing

    前言

    几乎每个项目都会有各种各样的工具类,在开发中通过它们可更直接方便地实现功能。下面将介绍一些比较常用的工具类,而具体的实现请下载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. 手机系统类型

    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中提供了PermissionManager用于6.0版本的权限申请,使用RxPermisiion实现。

    这里说下一般的申请流程:
    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.getDirectory(parentDirectory, directory);
    
    /**
     * 创建一个文件夹, 存在则返回, 不存在则新建
     *
     * @param File parentDirectory 父目录
     * @param String directory  目录名
     * @return 文件,null代表失败
     */
     FileUtil.getDirectory(parentDirectory, directory)
    
    • 创建文件
    /**
     * 创建一个文件, 存在则返回, 不存在则新建
     *
     * @param File catalog 父目录
     * @param String name    文件名
     * @return 文件,null代表失败
     */
     FileUtil.getFile(catalog, name);
    
    /**
    * 根据全路径创建一个文件
    *
    * @param filePath 文件全路径
    * @return 文件,null代表失败
    */
    FileUtil.getFile(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. 缓存

    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. 状态栏/导航栏颜色

    提供了ColorBar工具类,用于沉浸式状态栏实现,来自https://github.com/Zackratos/UltimateBar,具体用法到里面查阅。

    14. 其他

    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


    相关文章

      网友评论

        本文标题:常用的一些工具类

        本文链接:https://www.haomeiwen.com/subject/vfxdpxtx.html