当前位置: 首页 > news >正文

Android 将EasyPermissions进一步封装,使得动态权限申请更加简明

1.引入依赖:

implementation 'pub.devrel:easypermissions:3.0.0'

2.在BaseActivity处理统一的结果回调和请求Code

核心内容:

        (1)处理Activity本身继承的方法onRequestPermissionsResult        

        (2)实现接口EasyPermissions.PermissionCallbacks来接收请求结果

        (3)定义申请权限跳转带出去的Code(Int类型,合法范围0-255)

        (4)定义PermissionsCallBack是对结果返回的进一步简化 (非必须)

/***Author:XingHai.Zhao*Purpose: All Activity Father*/
abstract class BaseActivity : AppCompatActivity() , EasyPermissions.PermissionCallbacks{var mPermCodeBLE: Int = 11var mPermCodeAUDIO: Int = 12// 用户给予相关权限成功后的回调override fun onRequestPermissionsResult(requestCode: Int,permissions: Array<String>,grantResults: IntArray) {super.onRequestPermissionsResult(requestCode, permissions, grantResults)// 进一步使用 EasyPermissions 处理后续结果EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)}override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {// 授予权限mPermissionsCallBack?.let {it.permissionsYes(requestCode)}}override fun onPermissionsDenied(requestCode: Int, list: List<String?>) {// 请求权限被拒mPermissionsCallBack?.let {it.permissionsNo(requestCode)}}var mPermissionsCallBack: PermissionsCallBack? = nullinterface PermissionsCallBack {fun permissionsYes(code: Int) //获取授权成功fun permissionsNo(code: Int) //获取授权成功}// 获取蓝牙相关的权限fun getBlePerm(): Array<String> {return when {Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> arrayOf(Manifest.permission.BLUETOOTH_SCAN,Manifest.permission.BLUETOOTH_CONNECT,Manifest.permission.BLUETOOTH_ADVERTISE,Manifest.permission.ACCESS_FINE_LOCATION)Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.ACCESS_FINE_LOCATION)else -> arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.ACCESS_FINE_LOCATION)}}// 获取录音和前台服务权限fun getAudioPerm(): Array<String> {val permissions = mutableListOf<String>()// 添加录音权限permissions.add(Manifest.permission.RECORD_AUDIO)// 根据 Android 版本添加前台服务权限if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {permissions.add(Manifest.permission.FOREGROUND_SERVICE)}return permissions.toTypedArray()}}


3具体请求用蓝牙举例:

        //权限判断,第一次弹出系统的授权提示框if (EasyPermissions.hasPermissions(this, *getBlePerm())) {if (!BluetoothAdapter.getDefaultAdapter().isEnabled) {//打开蓝牙开关startActivity(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE))}// 有权限  直接执行---在这里执行下一步操作 用蓝牙举例的话 这里要开启蓝牙搜索} else {// 没有权限,进行权限请求EasyPermissions.requestPermissions(this,getString("需要赋予相关权限,方能正常使用该功能!"),mPermCodeBLE,*getBlePerm())}mPermissionsCallBack = object :PermissionsCallBack{override fun permissionsYes(code: Int) {---在这里执行下一步操作 用蓝牙举例的话 这里要开启蓝牙搜索}override fun permissionsNo(code: Int) {}}
 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 新品亮相|美格智能SLM530/SLM530P智能模组,助力金融新零售智慧升级
  • [NSSCTF 2022 Spring Recruit]ezgame
  • 如何评估叠螺机厂家的技术能力
  • 面试时被问的问题
  • pandas:读取各类文件方法以及爬虫时json数据保存
  • RabbitMQ 07 另两种集群方式 warren(主备模式),shovel(远程模式)
  • PHP常用正则表达式大全
  • 快速傅里叶变换(FFT)时,所需指定的FFT点数如何选择
  • 【秋招笔试-支持在线评测】9.19小米秋招(已改编)-三语言题解
  • Linux - iptables防火墙
  • Flask项目入门和视图
  • 监控IDS和IPS增强网络安全性
  • 基于物联网的火灾报警器设计与实现(论文+源码)
  • 客户案例:CACTER硬件网关精准防护,助力互联网企业安全升级
  • YOLOv5/v8 + 双目相机测距
  • JavaScript-如何实现克隆(clone)函数
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • CEF与代理
  • Django 博客开发教程 16 - 统计文章阅读量
  • docker-consul
  • Git学习与使用心得(1)—— 初始化
  • k个最大的数及变种小结
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Python学习之路16-使用API
  • Rancher如何对接Ceph-RBD块存储
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • TypeScript迭代器
  • Vue 重置组件到初始状态
  • vue-loader 源码解析系列之 selector
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Yii源码解读-服务定位器(Service Locator)
  • 阿里云前端周刊 - 第 26 期
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记录:CentOS7.2配置LNMP环境记录
  • 使用common-codec进行md5加密
  • 详解NodeJs流之一
  • 原生js练习题---第五课
  • 转载:[译] 内容加速黑科技趣谈
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # Java NIO(一)FileChannel
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (Note)C++中的继承方式
  • (NSDate) 时间 (time )比较
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (十) 初识 Docker file
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端