安卓权限申请框架PermissionsDispatcher使用

安卓动态权限申请库PermissionsDispatcher使用

动态权限申请库https://github.com/permissions-dispatcher/PermissionsDispatcher

安卓6.0之前的系统,应用权限会在应用被安装的时候以列表的形式列出,用户可以看到那些权限被申请了,也可以选择性的关闭权限,6.0之后系统在应用安装时,不采取这种方式来申请权限,对于一般的没有危险的权限,应用安装时自动申请了,且不能关闭权限,而危险权限需要用户自己去选择是否开启,关于权限的说明可以参考官方的文档https://developer.android.google.cn/guide/topics/permissions/overview,里面介绍了最新Android P版本中的几种权限类型,可自己查看那些是正常权限,危险权限,签名权限。

说了这么多,下面进入正题,动态权限申请库PermissionsDispatcher的使用了,因为我使用的AS是当前最新版3.1.4版本,以下均以这个版本为参考操作。

在AS中安装插件
打开AS的setting—->Plugins—->Browse repositories,然后在搜索框中输入Permissions,在结果中找到PermissionsDispatcher plugin,点击install,安装完成后显示Restart Android Studio,点击后重启studio即可,重启后进入studio,首先在AndroidManifest.xml中声明需要申请的权限如:

//写存储权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//读存储权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//相机权限
<uses-permission android:name="android.permission.CAMERA" />

在清单文件中申明后,在需要申请权限的地方鼠标右键—->Generate—>Generate Runtime Permissions(或者使用快捷键Alt+Insert —->Generate Runtime Permissions)

弹出插件选择权限窗口,在窗口中选择权限(对应AndroidManifest文件中申请的权限,如果没有申请的权限,即使在插件窗口中勾选了权限申请,实际运行时也不会去申请权限的)

在选择完权限后,必要的方法NeedsPermission中输入申请权限的方法名,点击底部按钮Generate后,会提示Rebuild Project,确定即可,build完成后会自动生成申请权限的代码,且所在类也会添加一个注册的注解

@RuntimePermissions
public class MainActivity extends BaseActivity {

    ......

    @NeedsPermission({Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE})
        void applayPermissions() {
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
    }
}

同时在app moudle 中也会添加了PermissionsDispatcher的依赖(如果之前没有添加库依赖)

implementation "com.github.hotchemi:permissionsdispatcher:3.1.0"
annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:3.1.0"

@NeedsPermission注解下的方法就是刚刚输入的名称的方法,在需要申请权限的地方调用

//这里的方法名为 applayPermissions(为@NeedsPermission注解下的方法名) + WithPermissionCheck,也可以直接去生成类MainActivityPermissionsDispatcher中查看
MainActivityPermissionsDispatcher.applayPermissionsWithPermissionCheck(this);

到此申请权限就已经做完了,运行程序就会弹出申请权限的窗口

因为演示程序里面只处理了第一个必要的申请方法,其他三个都未处理,拒绝了权限后下次进入时还是会申请权限,选择了不再询问后不会弹出申请权限的窗口。到此权限申请库使用介绍完毕。欢迎大家指出不足的地方,谢谢!

猜你喜欢

转载自blog.csdn.net/u012237341/article/details/81669627