集成步骤
1.在项目根目录下的 build.gradle
文件中加入
buildscript {
repositories {
maven { url 'https://jitpack.io' }
}
}
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
2.在项目 app 模块下的 build.gradle
文件中加入
android {
// 支持 JDK 1.8
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
// 权限请求框架:https://github.com/getActivity/XXPermissions
implementation 'com.github.getActivity:XXPermissions:11.2'
}
AndroidX
如果项目是基于 AndroidX 包,请在项目 gradle.properties
文件中加入
# 表示将第三方库迁移到 AndroidX
android.enableJetifier = true
如果项目是基于 Support 包则不需要加入此配置
分区存储:如果项目已经适配了 Android 10 分区存储特性,请在 Application 初始化时加入
public final class XxxApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 当前项目是否已经适配了分区存储的特性
XXPermissions.setScopedStorage(true);
}
}
如果当前项目没有适配这特性,那么这一步骤可以忽略
添加的权限也必须在xml中添加
一句代码搞定权限请求,从未如此简单
XXPermissions.with(this)
.permission(Permission.RECORD_AUDIO)
.permission(Permission.Group.CALENDAR)
.request(new OnPermissionCallback() {
@Override
public void onGranted(List permissions, boolean all) {
if (all) {
toast("获取录音和日历权限成功");
}
}
});
当然如果是android11 会跳转手动确认权限页面,之后在Activity中可以添加以下方法来判断是否已授权
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == XXPermissions.REQUEST_CODE) {
if (XXPermissions.isGranted(this, Permission.RECORD_AUDIO) &&
XXPermissions.isGranted(this, Permission.Group.CALENDAR)) {
toast("用户已经在权限设置页授予了录音和日历权限");
} else {
toast("用户没有在权限设置页授予权限");
}
}
}
如果用户全部授予只会调用 onGranted 方法,如果用户全部拒绝只会调用 onDenied 方法。
isGranted是判断某权限是否授权
如果想知道回调中的某个权限是否被授权或者拒绝,可以调用 List 类中的 contains(Permission.XXX) 方法来判断这个集合中是否包含了这个权限。
对于android11 新的特性可以进官网查看:不如位置权限:https://developer.android.google.cn/training/location/permissions?hl=zh_cn
原文链接:https://github.com/getActivity/XXPermissions
Demo下载地址:https://download.csdn.net/download/yyxhzdm/19096864?spm=1001.2014.3001.5501
最后是交流公众号,大家可以关注一下