Android---PermissionX实现动态权限申请

本文介绍了GoogleAndroid6.0后的权限系统变化,重点讲解了PermissionX库如何让Android应用在运行时轻松请求和管理权限,包括基本使用、权限解释对话框和处理不再询问情况的方法。
摘要由CSDN通过智能技术生成

Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。

PermissionX是一个扩展Android库,使Android运行时权限请求变得极其容易。你可以将它用于基本的许可请求场合或处理更复杂的情况,如显示理由对话框或手动进入应用程序设置以获得许可。官方网址:https://github.com/guolindev/PermissionX

基本使用

1. 在 build.gradle 文件中添加如下依赖

// 第三方权限框架
// https://github.com/guolindev/PermissionX
implementation 'com.guolindev.permissionx:permissionx:1.7.1'

2. 在 AndroidManifest.xml 中添加声明需要申请的权限。这里添加了读取存储权限、相机权限、电话权限。

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CALL_PHONE" />

3. 使用以下代码进行请求。

PermissionX.init(this)
    .permissions(
          Manifest.permission.READ_CONTACTS,
          Manifest.permission.CAMERA,
          Manifest.permission.CALL_PHONE
     )
     .request{ allGranted, grantedList, deniedList ->
          if(allGranted){
              Toast.makeText(this, "All permissions are granted", Toast.LENGTH_LONG).show()
              // todo something
          }else {
              // deniedList 包含所拒绝的权限
              Toast.makeText(this, "These permissions are denied: $deniedList", Toast.LENGTH_LONG).show()
              // todo something
          }
     }

注意:Manifest 一定是要 android 包下的 

将一个 Activity 的实例传递到 init 方法中。在 permissions() 方法中添加需要动态申请的权限,然后调用 request 方法进行实际请求。请求结果将在请求 lambda 中回调。

allGranted : Boolean。表示用户是否授权所有的请求。

grantedList:保存用户同意的所有权限。

deniedList:保存用户拒绝的所有权限。

更多使用

如你所知,Android 提供了 shouldShowRequestPermissionRationale 方法来指示我们是否应该显示一个基本原理对话框来向用户解释我们为什么需要该权限。否则用户可能会拒绝我们请求的权限并选中“不再询问”选项。

为了简化这个过程,PermissionX 提供了 onExplainRequestReason 方法。在请求方法之前链接此方法,如果用户拒绝其中一个权限,onExplainRequestReason 方法将首先获得回调。然后你可以调用 showRequestReasonDialog 方法向用户解释为什么这些权限是必须的。

showRequestReasonDialog 方法将提示一个基本原理对话框,第二个参数解释为什么需要这些权限。如果用户点击第三个参数提供的“确定”按钮,PermissionX 将再次请求第一个参数里被拒绝的权限。

第四个参数可选,为“取消”按钮,如果用户点击该按钮,则将取消解释对话框。如果拒绝的权限是必须的,可以不设置第四个参数,对话框将无法取消。这意味着用户必须允许进一步申请这些权限。

当然,用户仍然可以拒绝一些权限,并选中“不再询问”选项。在这种情况下,每次我们再次请求这些权限时都会被自动拒绝。我们唯一能做的就是提示用户需要在应用设置中手动允许这些权限以继续使用。但是 PermissionX 做的更好。 

PermissionX 提供 onForwardToSettings 方法来处理这种情况。在请求方法之前链接此方法,如果某些权限被用户“拒绝并且不再询问”,onForwardToSettings 方法将得到回调。然后你可以像下面这样调用 showForwardToSettingDialog 方法。

showForwardToSettingDialog方法中的参数与 showRequestReasonDialog 方法相似。当用户点击肯定按钮时,PermissionX 将转到应用程序的设置页面,用户可以非常快速地打开必要的权限。当用户切换回应用程序时,PermissionX 将自动再次请求必要的权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别偷我的猪_09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值