个人营销型网站,北辰天津网站建设,国内十大网站建设,网页设计模板图片简单官网
项目地址#xff1a;Github博文地址#xff1a;一句代码搞定权限请求#xff0c;从未如此简单 框架亮点
一马当先#xff1a;首款适配 Android 13 的权限请求框架简洁易用#xff1a;采用链式调用的方式#xff0c;使用只需一句代码体积感人#xff1a;功能在同类…官网
项目地址Github博文地址一句代码搞定权限请求从未如此简单 框架亮点
一马当先首款适配 Android 13 的权限请求框架简洁易用采用链式调用的方式使用只需一句代码体积感人功能在同类框架中是最全的但是框架体积是垫底的支持全面首款也是唯一一款适配所有 Android 版本的权限请求框架技术难题攻坚首款解决权限申请在 Android 12 出现系统内存泄漏的框架适配极端情况无论在多么极端恶劣的环境下申请权限框架依然坚挺向下兼容属性新权限在旧系统可以正常申请框架会做自动适配无需调用者适配自动检测错误如果出现错误框架会主动抛出异常给调用者仅在 Debug 下判断把 Bug 扼杀在摇篮中
集成步骤
如果你的项目 Gradle 配置是在 7.0 以下需要在 build.gradle 文件中加入
allprojects {repositories {// JitPack 远程仓库https://jitpack.iomaven { url https://jitpack.io }}
}
如果你的 Gradle 配置是 7.0 及以上则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {repositories {// JitPack 远程仓库https://jitpack.iomaven { url https://jitpack.io }}
}
配置完远程仓库后在项目 app 模块下的 build.gradle 文件中加入远程依赖
android {// 支持 JDK 1.8 及以上compileOptions {targetCompatibility JavaVersion.VERSION_1_8sourceCompatibility JavaVersion.VERSION_1_8}
}dependencies {// 权限请求框架https://github.com/getActivity/XXPermissionsimplementation com.github.getActivity:XXPermissions:18.3
}
AndroidX 兼容
如果项目是基于 AndroidX 包请在项目 gradle.properties 文件中加入
# 表示将第三方库迁移到 AndroidX
android.enableJetifier true
如果项目是基于 Support 包则不需要加入此配置
分区存储
如果项目已经适配了 Android 10 分区存储特性请在 AndroidManifest.xml 中加入
manifestapplication!-- 告知 XXPermissions 当前项目已经适配了分区存储特性 --meta-dataandroid:nameScopedStorageandroid:valuetrue //application/manifest
如果当前项目没有适配这特性那么这一步骤可以忽略需要注意的是这个选项是框架用于判断当前项目是否适配了分区存储需要注意的是如果你的项目已经适配了分区存储特性可以使用 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 来申请权限如果你的项目还没有适配分区特性就算申请了 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 权限也会导致无法正常读取外部存储上面的文件如果你的项目没有适配分区存储请使用 MANAGE_EXTERNAL_STORAGE 来申请权限这样才能正常读取外部存储上面的文件你如果想了解更多关于 Android 10 分区存储的特性可以点击此处查看和学习。
一句代码搞定权限请求从未如此简单
Java 用法示例
XXPermissions.with(this)// 申请单个权限.permission(Permission.RECORD_AUDIO)// 申请多个权限.permission(Permission.Group.CALENDAR)// 设置权限请求拦截器局部设置//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制局部设置//.unchecked().request(new OnPermissionCallback() {Overridepublic void onGranted(NonNull ListString permissions, boolean allGranted) {if (!allGranted) {toast(获取部分权限成功但部分权限未正常授予);return;}toast(获取录音和日历权限成功);}Overridepublic void onDenied(NonNull ListString permissions, boolean doNotAskAgain) {if (doNotAskAgain) {toast(被永久拒绝授权请手动授予录音和日历权限);// 如果是被永久拒绝就跳转到应用权限系统设置页面XXPermissions.startPermissionActivity(context, permissions);} else {toast(获取录音和日历权限失败);}}});
Kotlin 用法示例
XXPermissions.with(this)// 申请单个权限.permission(Permission.RECORD_AUDIO)// 申请多个权限.permission(Permission.Group.CALENDAR)// 设置权限请求拦截器局部设置//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制局部设置//.unchecked().request(object : OnPermissionCallback {override fun onGranted(permissions: MutableListString, allGranted: Boolean) {if (!allGranted) {toast(获取部分权限成功但部分权限未正常授予)return}toast(获取录音和日历权限成功)}override fun onDenied(permissions: MutableListString, doNotAskAgain: Boolean) {if (doNotAskAgain) {toast(被永久拒绝授权请手动授予录音和日历权限)// 如果是被永久拒绝就跳转到应用权限系统设置页面XXPermissions.startPermissionActivity(context, permissions)} else {toast(获取录音和日历权限失败)}}})
框架其他 API 介绍
// 判断一个或多个权限是否全部授予了
XXPermissions.isGranted(Context context, String... permissions);// 获取没有授予的权限
XXPermissions.getDenied(Context context, String... permissions);// 判断某个权限是否为特殊权限
XXPermissions.isSpecial(String permission);// 判断一个或多个权限是否被永久拒绝了一定要在权限申请的回调方法中调用才有效果
XXPermissions.isPermanentDenied(Activity activity, String... permissions);// 跳转到应用权限设置页
XXPermissions.startPermissionActivity(Context context, String... permissions);
XXPermissions.startPermissionActivity(Activity activity, String... permissions);
XXPermissions.startPermissionActivity(Activity activity, String... permission, OnPermissionPageCallback callback);
XXPermissions.startPermissionActivity(Fragment fragment, String... permissions);
XXPermissions.startPermissionActivity(Fragment fragment, String... permissions, OnPermissionPageCallback callback);// 设置不触发错误检测机制全局设置
XXPermissions.setCheckMode(false);
// 设置权限申请拦截器全局设置
XXPermissions.setInterceptor(new IPermissionInterceptor() {});
框架混淆规则
在混淆规则文件 proguard-rules.pro 中加入
关于权限监听回调参数说明
我们都知道如果用户全部授予只会调用 onGranted 方法如果用户全部拒绝只会调用 onDenied 方法。但是还有一种情况如果在请求多个权限的情况下这些权限不是被全部授予或者全部拒绝了而是部分授权部分拒绝这种情况框架会如何处理回调呢框架会先调用 onDenied 方法再调用 onGranted 方法。其中我们可以通过 onGranted 方法中的 allGranted 参数来判断权限是否全部授予了。如果想知道回调中的某个权限是否被授权或者拒绝可以调用 List 类中的 contains(Permission.XXX) 方法来判断这个集合中是否包含了这个权限。 文章转载自: http://www.morning.wsjnr.cn.gov.cn.wsjnr.cn http://www.morning.xcxj.cn.gov.cn.xcxj.cn http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.qkdcb.cn.gov.cn.qkdcb.cn http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.mzzqs.cn.gov.cn.mzzqs.cn http://www.morning.gryzk.cn.gov.cn.gryzk.cn http://www.morning.ggnjq.cn.gov.cn.ggnjq.cn http://www.morning.tslfz.cn.gov.cn.tslfz.cn http://www.morning.wyzby.cn.gov.cn.wyzby.cn http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.xqwq.cn.gov.cn.xqwq.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn http://www.morning.dpwcl.cn.gov.cn.dpwcl.cn http://www.morning.rlwgn.cn.gov.cn.rlwgn.cn http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn http://www.morning.grcfn.cn.gov.cn.grcfn.cn http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn http://www.morning.wqtzs.cn.gov.cn.wqtzs.cn http://www.morning.dongyinet.cn.gov.cn.dongyinet.cn http://www.morning.qrcxh.cn.gov.cn.qrcxh.cn http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn http://www.morning.fwzjs.cn.gov.cn.fwzjs.cn http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.zwxfj.cn.gov.cn.zwxfj.cn http://www.morning.slwfy.cn.gov.cn.slwfy.cn http://www.morning.yrngx.cn.gov.cn.yrngx.cn http://www.morning.fpryg.cn.gov.cn.fpryg.cn http://www.morning.twgzq.cn.gov.cn.twgzq.cn http://www.morning.ggfdq.cn.gov.cn.ggfdq.cn http://www.morning.xnfg.cn.gov.cn.xnfg.cn http://www.morning.zknxh.cn.gov.cn.zknxh.cn http://www.morning.lnbyk.cn.gov.cn.lnbyk.cn http://www.morning.znsyn.cn.gov.cn.znsyn.cn http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn http://www.morning.klpwl.cn.gov.cn.klpwl.cn http://www.morning.qbccg.cn.gov.cn.qbccg.cn http://www.morning.frfnb.cn.gov.cn.frfnb.cn http://www.morning.rgnp.cn.gov.cn.rgnp.cn http://www.morning.smrty.cn.gov.cn.smrty.cn http://www.morning.rnpt.cn.gov.cn.rnpt.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.gklxm.cn.gov.cn.gklxm.cn http://www.morning.qwbtr.cn.gov.cn.qwbtr.cn http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn http://www.morning.sjsfw.cn.gov.cn.sjsfw.cn http://www.morning.xpqyf.cn.gov.cn.xpqyf.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.rysmn.cn.gov.cn.rysmn.cn http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.fplwz.cn.gov.cn.fplwz.cn http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn http://www.morning.dndjx.cn.gov.cn.dndjx.cn http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.rhkgz.cn.gov.cn.rhkgz.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.mpwgs.cn.gov.cn.mpwgs.cn http://www.morning.tzjqm.cn.gov.cn.tzjqm.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn http://www.morning.xcjbk.cn.gov.cn.xcjbk.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.pzjrm.cn.gov.cn.pzjrm.cn http://www.morning.dndk.cn.gov.cn.dndk.cn http://www.morning.rcmcw.cn.gov.cn.rcmcw.cn http://www.morning.xkppj.cn.gov.cn.xkppj.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn