Android6.0动态权限问题,使用PermissionDispatcher自动分配

Android 6.0 权限问题
Android 6.0对权限做了区分,将手机的权限分为危险权限和非危险权限;

非危险权限只要在AndroidManifest中加入权限申请就可以使用了。
而危险权限只在AndroidManifest中加入权限申请是不行的,在运行的时候会报错。存储卡的读写操作就被定义为危险权限。

原生的方式,不太好,不用

public void requestAllPower2() {
    //判断是否已经赋予权限
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
            //申请
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.READ_EXTERNAL_STORAGE}, 1);

    }
}

推荐使用,PermissionsDispatcher,导入比较特殊

1.首先下载Android Studio的插件。

https://plugins.jetbrains.com/plugin/8349-permissionsdispatcher-plugin
Android6.0动态权限问题,使用PermissionDispatcher自动分配

2.下载好后,在Android studio 中File—Settings—Plugins—(右下角)Install plugin from disk—选择刚才下载好的压缩包

Android6.0动态权限问题,使用PermissionDispatcher自动分配

3.安装好后,重启AS,在代码的界面上,右键—Generate—Add PermissionsDispatcher dependencies—Generate Runtime Permission

Android6.0动态权限问题,使用PermissionDispatcher自动分配
Android6.0动态权限问题,使用PermissionDispatcher自动分配

4.在Manifest.xml中加入(我这里选择了相机,读写存储卡)

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

5.在onCrete中加入这行代码

Android6.0动态权限问题,使用PermissionDispatcher自动分配

 MainActivityPermissionsDispatcher.permissionsWithPermissionCheck(this);

参考资料

PermissionDispatcher,RxPermission,EasyPermission对比:
https://blog.csdn.net/qq_38414907/article/details/76535559