- 在项目根目录下的
build.gradle
文件中加入
buildscript {
repositories {
maven { url 'https://jitpack.io' }
}
}
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
- 在项目 app 模块下的
build.gradle
文件中加入
dependencies {
// 权限请求框架:https://github.com/SaltedFish-Extreme/PermissionX
implementation 'com.github.SaltedFish-Extreme:PermissionX:1.0.0'
}
//请求单个权限
PermissionX.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) {
//授予执行操作
if (it) Toast.makeText(this, "You granted permission", Toast.LENGTH_SHORT).show()
//拒绝执行操作
else Toast.makeText(this, "You denied granted permission", Toast.LENGTH_SHORT).show()
}
//请求多个权限
PermissionX.requestPermissions(
this,
//多个权限用','隔开
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
) { map, b ->
//回调<权限名称,授予与否>集合以及是否全部授予
if (b) {
//权限全部授予执行的操作
Toast.makeText(this, "You granted all permissions", Toast.LENGTH_SHORT).show()
} else {
//否则遍历回调的<权限名称,授予与否>数组
map.entries.forEach { entry ->
if (!entry.value) {
//未授予的权限执行的操作 这里弹出未授予的权限名
Toast.makeText(this, "You denied ${entry.key.substringAfterLast(".")} permission", Toast.LENGTH_SHORT).show()
}
}
}
}
初版完成,使用 Activity Results API 对权限申请操作进行了封装,虽然新API的底层仍然是onActivityResult那一套,不过总觉得使用起来更麻烦了,第一次写框架,尽力了
library目录里是框架库,demo目录里就是kotlin和java的示例了,封装了单个权限请求以及多个权限请求的操作,demo里有很具体注释也很详细的示例了,library里的框架工作流程的注释和代码也很详细了,一般都能看懂,那么就这样吧,最后一个项目完工
对用户永久拒绝授权的权限没有进行封装操作,轮子哥的权限框架 会跳到app的权限页让用户手动开启,这样也挺好啊。。。
minSdkVersion 23(安卓6) compileSdkVersion 31(安卓12) targetSdkVersion 31(安卓12)
对比下来还是感觉kotlin的更舒服啊,两个月没用java已经有些陌生了,java遍历map集合取值还会空指针警告=.=