博客
关于我
记录下 rxpermissions2 的封装
阅读量:501 次
发布时间:2019-03-07

本文共 3888 字,大约阅读时间需要 12 分钟。

Android 权限申请工具类

本文将详细介绍一个高效的Android权限申请工具类,基于RxPermissions框架,能够简化多权限申请流程,并处理权限申请的各种错误情况。

工具类概述

本工具类旨在简化Android应用中多权限申请的流程,支持批量请求多个权限,并通过RxPermissions框架进行权限管理。以下是工具类的主要特点:

  • 支持批量权限申请:可以同时申请多个权限,减少开发过程中的重复代码。
  • 智能权限检测:自动检测已授予的权限,避免重复申请。
  • 灵活配置:支持根据需求定义不同的权限申请组合。
  • 详细权限回调:提供多种回调方式,根据权限申请结果进行相应处理。

功能说明

  • 权限申请流程
  • 工具类通过_rxPermissions.requestEach_方法实现多权限申请的订阅模式。以下是核心流程:

    requestPermission(..., RxPermissions rxPermissions, RxErrorHandler errorHandler, String... permissions)
    1. 权限状态管理
    2. 工具类内置了对权限状态的管理逻辑,能够正确识别权限申请的成功与失败,并根据不同场景触发相应的回调。具体回调方式如下:

      public interface RequestPermission {    void onRequestPermissionSuccess();    void onRequestPermissionFailure(List
      permissions); void onRequestPermissionFailureWithAskNeverAgain(List
      permissions);}
      1. 权限申请优化.tip
      2. 在使用工具类时,需注意以下几点:

        • 如果需要申请多个权限,前后依次使用工具类提供的方法或直接调用StartElement,使用载体方法如requestPermission
        • 首次申请权限需确保权限名称正确, "\" Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION
        • 大量权限申请时,建议采用批量方式 counties减少网络开销

        ##常见permission方法

        工具类提供了多个简化权限申请的方法,以下是主要方法总结:

        获取全部权限

        调用all方法,支持默认权限申请组合:

        public static void all(RequestPermission requestPermission, RxPermissions rxPermissions, RxErrorHandler errorHandler){    requestPermission(requestPermission, rxPermissions, errorHandler,                     Manifest.permission.ACCESS_COARSE_LOCATION,                     Manifest.permission.ACCESS_FINE_LOCATION,                     Manifest.permission.READ_PHONE_STATE,                     Manifest.permission.WRITE_EXTERNAL_STORAGE,                     Manifest.permission.CAMERA);}

        相关权限申请

        根据需求选择合适的权限申请方法,如:

        • 摄像头权限launchCamera
        • 二维码扫描scanQrCode
        • 外部存储权限externalStorage
        • 发短信权限sendSms
        • 拨打电话权限callPhone
        • 手机状态权限readPhoneState
        • 通讯录权限readPhoneContact
        • 位置信息权限readPhoneLocation
        • 视频权限readVideoPermission
        • 读取版本号readVersionPermission
        • 录音权限readRecordAudio
        • 日历权限readCalendar

        权限申请场景示例

        假设您需要申请摄像头和读取通讯录权限,可以选择以下方式:

      3. 继承自定义接口
      4. class MyPermissionCallback implements RequestPermission {    @Override    void onRequestPermissionSuccess() {        // 已获得相应权限        Toast.makeText(context, "权限申请成功", Toast.LENGTH_SHORT).show();    }    @Override    void onRequestPermissionFailure(List
        permissions) { // 部分权限申请失败 Toast.makeText(context, "权限申请失败 weakening...", Toast.LENGTH_SHORT).show(); } @Override void onRequestPermissionFailureWithAskNeverAgain(List
        permissions) { // 用户选择不再询问 Toast.makeText(context, "无法继续申请该权限,请进入设置中手动设置", Toast.LENGTH_LONG).show(); }}
        1. 调用工具类方法
        2. PermissionUtil.launchCamera(new MyPermissionCallback(), rxPermissions, errorHandler);

          权限申请失败处理

          在权限申请失败时,工具类会根据以下场景触发相应的回调:

        3. 权限申请失败但可以继续询问

          • 回调方式onRequestPermissionFailure(List<String> permissions)
          • 使用场景:用户选择暂时拒绝权限申请
          • 示例处理逻辑
          UIImageView无法显示图片,提示用户打开设置更改权限>>
        4. 用户选择不再询问

          • 回调方式onRequestPermissionFailureWithAskNeverAgain(List<String> permissions)
          • 使用场景:用户选择以后不再询问该权限
          • 示例处理逻辑
          UIImageView无法显示图片,提示用户进入设置手动开启权限
        5. 所有权限申请成功

          • 回调方式onRequestPermissionSuccess
          • 示例处理逻辑
          Toast.makeText(context, "权限申请成功", Toast.LENGTH_SHORT).show();
        6. 权限申请注意事项

        7. 权限申请顺序

          • 建议根据依赖关系排序,确保必要的权限优先申请。
          • 因此,权限申请应从基础权限开始,如ACCESS_COARSE_LOCATION racing ahead of ACCESS_FINE_LOCATION
        8. 权限检测方法

          • 在权限申请前,可以通过isGranted(permissions)方法检测已授予的权限
          • 示例判断:
          boolean writeExternalStorage = rxPermissions.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        9. 权限自动处理

          • 大多数系统权限申请会自动处理,比如 WRITE_EXTERNAL_STORAGE 会自动包含 READ_EXTERNAL_STORAGE
          • 需要注意的是, 一些权限需要用户明确表示允许, 例如SEND_SMS和CALL_PHONE
        10. 权限兼容性

          • 不同品牌手机或不同的Android版本可能有不同的权限管理策略, 建议在发布前测试所有权限申请场景
        11. 依赖项说明

          该工具类依赖以下库:

          "rxpermissions2"             : "com.github.tbruyelle:rxpermissions:0.10.2","rxerrorhandler2"            : "me.jessyan:rxerrorhandler:2.1.1",

          开发者指南

          本文涵盖了权限申请工具类的开发者使用方法和注意事项, 建议开发者在使用该工具时:

        12. 充分测试:权限申请可能因设备、系统版本导致不同的结果, 建议在多个设备和系统版本上进行测试
        13. 用户体验优化:权限申请成功或失败时, 建议提供友好的用户反馈提示
        14. 权限申请策略:根据应用需求制定权限申请策略, 避免过度权限申请引发用户反感
        15. 持续更新:随着Android系统更新,权限调用的方式和权限政策可能发生变化, 建议不断跟进并更新代码
        16. 通过以上步骤和内容开发者可以充分利用Android 权限申请工具类简化开发流程, 提高应用的功能完备性和用户体验。

    转载地址:http://uovcz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现bubble sort冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现bucket sort桶排序算法(附完整源码)
    查看>>
    Objective-C实现Burke 抖动算法(附完整源码)
    查看>>
    Objective-C实现Burrows-Wheeler 算法(附完整源码)
    查看>>
    Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
    查看>>
    Objective-C实现calloc函数功能(附完整源码)
    查看>>
    Objective-C实现canny边缘检测算法(附完整源码)
    查看>>
    Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>
    Objective-C实现chudnovsky algorithm楚德诺夫斯基算法(附完整源码)
    查看>>
    Objective-C实现CIC滤波器(附完整源码)
    查看>>
    Objective-C实现circle sort圆形排序算法(附完整源码)
    查看>>
    Objective-C实现CircularQueue循环队列算法(附完整源码)
    查看>>
    Objective-C实现clearBit清除位算法(附完整源码)
    查看>>
    Objective-C实现climbStairs爬楼梯问题算法(附完整源码)
    查看>>
    Objective-C实现cocktail shaker sort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现cocktailShakerSort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现CoinChange硬币兑换问题算法(附完整源码)
    查看>>
    Objective-C实现collatz sequence考拉兹序列算法(附完整源码)
    查看>>
    Objective-C实现Collatz 序列算法(附完整源码)
    查看>>