当前位置: 首页 > 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) {}}
 


http://www.mrgr.cn/news/30794.html

相关文章:

  • 使用控制台对C语言文件的编译执行
  • CSMA/CD和CSMA/CA
  • C#画图板代码
  • 第3篇 滑动开关控制LED__ARM汇编语言工程<一>
  • 【数据库】数据库设计
  • linux-Firewalld使用指南
  • 【devops】rsync介绍和使用
  • 利用echarts 显示图片信息
  • VMware虚拟机密码忘记了怎么办
  • kafka3.8的基本操作
  • 【Spring】IocDI详解(6)
  • mysql中的json查询
  • 元数据保护者,Caesium压缩不丢重要信息
  • 自制数据库空洞率清理工具-C版-03-EasyClean-V1.3(支持南大通用数据库Gbase8a)
  • 看完大模型,我决定改变自己的大脑
  • 气膜场馆造价解析:来自气膜厂家的专业解答—轻空间
  • 天地伟业设备主动注册协议接入SVMSPro接入
  • k8s中的存储
  • 物流管理系统小程序的设计
  • Conda Config修改
  • 使用Python实现深度学习模型:智能旅游路线规划
  • 黑马程序员英语单词册
  • linux如何查看当前的目录所在位置
  • 【神器来袭】巨好用的3dmax建模插件合集推荐
  • JAVA连接世界驾驭未来国际版二手车交易市场系统小程序源码
  • 【编程基础知识】mysql是怎样执行一条sql语句的,涉及到哪些环节步骤是,mysql的整体体系结构是啥样的,有哪些组件