最新权限框架,适配到android11

 

集成步骤

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

最新权限框架,适配到android11_第1张图片

原文链接:https://github.com/getActivity/XXPermissions

Demo下载地址:https://download.csdn.net/download/yyxhzdm/19096864?spm=1001.2014.3001.5501

最后是交流公众号,大家可以关注一下

 

 

 

 

你可能感兴趣的:(Android进阶知识,android)