使用PermissionsDispatcher动态获取权限

使用PermissionsDispatcher动态获取权限

  • 插件
  • 具体注解解析
  • 添加依赖

详细的文章: https://blog.csdn.net/s13383754499/article/details/79034758
emmmmmmm,今天的项目里面有动态获取权限,so,就记录今天我学到的关于动态获取权限的知识点。
android6.0有一个动态获取权限框架PermissionDispatcher。

插件

首先先偷个懒吧,AS里面有快捷的方式可以添加代码,那就是装插件
装插件流程:settings —> plugins —>搜索:输入PermissionDispatcher —>点击安装 —>重启AS
添加:需添加获取权限的类里面右键 —> Generate —> Generate Runtime Permissions…/Add PermissionsDispatcher dependencies —> 选择你想要添加的权限(如下图)—> 点击Generate —>自动生成
使用PermissionsDispatcher动态获取权限_第1张图片

具体注解解析

PermissionDispatcher主要有以下几个注解:
(注意:被注解的方法不能是私有方法!!!)原因:使用PermissionsDispatcher除实现注解还需重写Activity的onRequestPermissionsResult()方法,在里面让一个PermissionsDispatcher执行回调。

1. @RuntimePermissions 标记需要运行时判断的类 
2. @NeedsPermission 标记需要检查权限的方法 
3. @OnShowRationale 授权提示回调 
4. @OnPermissionDenied 授权被拒绝回调 
5. @OnNeverAskAgain 授权不再拒绝不再显示回调
  1. @RuntimePermissions :必须使用的注解,用于标注想申请权限的Activity/Fragment的类名前。
@RuntimePermissions
public class PermissionsDispatcherActivity extends AppCompatActivity{
}
  1. @NeedsPermission(想要获取的权限…可以多个):必须使用的注解,当用户给予权限时会执行该方法。
    @NeedsPermission({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO})
    public void testNeedsPermission() {
        Toast.makeText(this, "testNeedsPermission", Toast.LENGTH_SHORT).show();
    }
  1. @OnShowRationale(想要获取的权限…可以多个):非必须的注解,向用户解释为什么需要这个权限的方法上,申请权限前要执行的方法,要传入一个PermissionRequest对象。
    @OnShowRationale({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO})
    //给用户解释要请求什么权限,为什么需要此权限
    void showRationale(final PermissionRequest request) {
        new AlertDialog.Builder(this)
                .setMessage("使用此功能需要WRITE_EXTERNAL_STORAGE和RECORD_AUDIO权限,下一步将继续请求权限")
                .setPositiveButton("下一步", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        request.proceed();//继续执行请求
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        request.cancel();//取消执行请求
                    }
                }).show();
    }

  1. @OnPermissionDenied(想要获取的权限…可以多个):非必须的注解,用户禁止授权时调用
    /**
     * 用户禁止授权时调用
     */
    @OnPermissionDenied({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA})
    void showDeniedPermission() {
        finish();
    }
  1. @OnNeverAskAgain(想要获取的权限…可以多个):非必须的注解,用户勾选不再提示授权和禁止授权时调用,可以在这个方法做申请权限失败并选择不再询问之后的处理。
    /**
     * 用户勾选不再提示授权和禁止授权时调用
     */
    @OnNeverAskAgain({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA})
    void showNeverAskForPermission() {
        Toast.makeText(this, "权限被禁止,请在应用管理开启权限。", Toast.LENGTH_SHORT).show();
    }

添加依赖

AS引入使用需要在项目的build.gradle添加:

buildscript {
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

在app Module的build.gradle添加:

apply plugin: 'android-apt'

dependencies {
	implementation 'com.github.hotchemi:permissionsdispatcher:2.3.1'
	annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.1'
}

你可能感兴趣的:(Android)