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

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

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/

    你可能感兴趣的文章
    nrm报错 [ERR_INVALID_ARG_TYPE]
    查看>>
    NS3 IP首部校验和
    查看>>
    NSDateFormatter的替代方法
    查看>>
    NSError 的使用方法
    查看>>
    NSGA-Ⅲ源代码
    查看>>
    nsis 安装脚本示例(转)
    查看>>
    NSJSON的用法(oc系统自带的解析方法)
    查看>>
    nslookup 的基本知识与命令详解
    查看>>
    NSNumber与NSInteger的区别 -bei
    查看>>
    NSOperation基本操作
    查看>>
    NSRange 范围
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>