EasyPermissions 是一个权限申请库 , 可以简化在 Android M 6.0 ( API Level 23 ) 及以上系统中的基本权限的动态申请操作 ;
EasyPermissions 是 谷歌官方推荐 的动态权限申请库 ;
权限申请处理细节 :
① 用户同意权限申请 : 一般情况下 结合 @AfterPermissionGranted 注解使用 , 该注解的作用是 , 如果指定的权限用户全部授权 , 那么再次回调该方法 , 执行实际的需要该权限的操作 ;
② 用户拒绝权限申请 : 用户之前拒绝了权限申请 , 再次申请时会弹出 权限申请原理对话框 , 让用户了解申请该权限的原因 ;
③ 用户永久拒绝权限申请 : 用户之前已经禁止询问权限申请 , 即永久拒绝了权限申请 , 此时需要弹出 引导用户设置权限对话框 , 该对话框的作用是 , 跳转到设置界面的权限设置页面 , 让用户自行设置权限 , 此时无法以 应用内对话框的形式设置权限 ;
在 Module 级别的 build.gradle 中进行如下配置 :
dependencies {
// 使用 Android X 的应用添加该依赖
implementation 'pub.devrel:easypermissions:3.0.0'
// 使用 Android Support Library 支持库 , 添加该依赖
implementation 'pub.devrel:easypermissions:2.0.1'
}
注意 使用不同的支持库 , 需要配置不同的 EasyPermissions 依赖库 ;
在 Activity 中需要实现 onRequestPermissionsResult 方法 , 用于处理权限申请结果 , 如 : 用户点击同意后的后续操作 , 用户点击拒绝后的后续操作 , 都需要通过该接口通知 EasyPermissions , EasyPermissions 收到结果后 , 会回调相关的回调函数 ;
/**
* 1. 重写 Activity 的 onRequestPermissionsResult 方法
* 主要是在该方法中使用 EasyPermissions 进一步处理权限申请后续结果
*/
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<out String>, grantResults: IntArray){
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
// 进一步使用 EasyPermissions 处理后续结果
EasyPermissions.onRequestPermissionsResult(
requestCode, permissions, grantResults, this);
}
权限申请结果回调接口 PermissionCallbacks :
① 接口方法 :
/**
* EasyPermissions.requestPermissions() 方法执行结果的回调接口
*/
public interface PermissionCallbacks extends ActivityCompat.OnRequestPermissionsResultCallback {
void onPermissionsGranted(int requestCode, @NonNull List<String> perms);
void onPermissionsDenied(int requestCode, @NonNull List<String> perms);
}
② 申请单个权限成功 : 回调 onPermissionsGranted 方法 , perms 参数是请求成功的权限字符串集合 ;
③ 申请单个权限失败 : 回调 onPermissionsDenied方法 , perms 参数是请求失败的权限字符串集合 ;
④ 申请多个权限 : 如果申请 5 个权限 , 3 个同意 , 2 个拒绝 , 那么就会 回调 onPermissionsGranted 和 onPermissionsDenied 方法各一次 , 每个回调方法中都会显示同意或拒绝的若干个权限 ;