权限处理框架XXPermissions

2,529 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

权限处理框架XXPermissions

随着现在安卓版本的不断更新,权限越发收紧,对权限处理的要求日益趋显。之前有个老项目用的是AndPermission,虽然目前AndPermission的Star有6.6K,但最近更新维护却是在20年。

为什么换成了XXPermissions

之前老项目用的是AndPermission,由于长时间没有维护,它也存在一些bug和兼容性问题,当同时要允许很多权限,比如同时允许使用统计、存储权限,就必须要分开去申请。 另外AndPermission是开启一个进程去申请权限,耗时长。

最终在Issues区发现了XXPermissions,是轮子哥的作品。尝试之后发现对多权限的申请就非常友好,:采用链式调用的方式,调用方式简洁。

image.png

这个库基本上把所有的权限都整合到了一起,自己不用额外再写其它的代码了,写个申请回调,剩下的就交给权限库去处理。

撸代码

1. 引入

gradle配置7.0以下,在build.gradle添加


allprojects {

repositories {

// JitPack 远程仓库:https://jitpack.io

maven { url 'https://jitpack.io' }

}

}

7.0以上,在settings.gradle中加入


dependencyResolutionManagement {

repositories {

// JitPack 远程仓库:https://jitpack.io

maven { url 'https://jitpack.io' }

}

}

引入库


implementation 'com.github.getActivity:XXPermissions:13.6'

2.申请普通权限

比如需要申请存储卡读写权限。

AndroidManifest.xml


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

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

定义常量


private static final String[] PERMISSIONS1 = new String[]{

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE};

XXPermissions权限处理部分,链式调用,一个回调方法包含了权限处理的场景,无需再进行onActivityResult进行监听,成功失败的结果都包含在回调中。


XXPermissions.with(this).permission(PERMISSIONS1).request(new OnPermissionCallback() {

@Override

public void onGranted(List<String> permissions, boolean all) {

Toast.makeText(MainActivity.this, "同意授权", Toast.LENGTH_LONG).show();

}

@Override

public void onDenied(List<String> permissions, boolean never) {

if (never) {

Toast.makeText(MainActivity.this, "被永久拒绝授权", Toast.LENGTH_LONG).show();

// 如果是被永久拒绝就跳转到应用权限系统设置页面

XXPermissions.startPermissionActivity(MainActivity.this, permissions);

} else {

Toast.makeText(MainActivity.this, "获取权限失败", Toast.LENGTH_LONG).show();

}

}

});

判断是否进行授权


boolean isGranted = XXPermissions.isGranted(this, PERMISSIONS1);

3.同时申请弹窗权限+页面权限

弹窗权限是指像存储类、相机类等权限,系统会弹窗让用户进行选择。

页面权限是指像查看应用使用权限、通知权限,需要另跳转页面才可以打开的权限。

XXPermissions非常好的一个优点就是这两种权限可以放在一起申请,剩下的XXPermissions都会帮忙处理好,开发者只需要关心回调结果。

AndroidManifest.xml


<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"

tools:ignore="ProtectedPermissions" />

常量


private static final String[] PERMISSIONS3 = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.PACKAGE_USAGE_STATS};

依旧按照正常的方法去申请


XXPermissions.with(this).permission(PERMISSIONS3).request(OnPermissionCallback);