前言
- 在以前我们一直用的是ActivityCompat.requestPermissions()去申请权限和重写onRequestPermissionsResult()回调方法,对授权结果进行判断,执行后续操作。
- 但是目前这个方法已经过时了,在网上找了一圈,大部分都是老方法,于是就决定自己重写一套权限框架。
- 项目地址:github.com/Peakmain/Ba…
使用文档
怎样使用
Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
but If it is a new version of Android studio,Add it in your root setting.gradle at the end of repositories:
dependencyResolutionManagement {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.Peakmain:BasicLibrary:1.1.1'
}
是否授予权限
//判断单个权限
PkPermission.isGranted(android.Manifest.permission.CAMERA)
//判断多个权限
PkPermission.isGranted(
arrayOf(
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
)
)
申请单个权限
PkPermission.request(this, android.Manifest.permission.CAMERA, object : OnPermissionCallback {
override fun onGranted(permissions: Array<String>) {
Log.e("TAG", "授予了权限:$permission")
}
override fun onDenied(permissions: Array<String>, never: Boolean) {
Log.e("TAG", "是否永久:$never 拒绝了${permission}权限")
}
})
申请多个权限
PkPermission.request(this, location, object : OnPermissionCallback {
override fun onGranted(permissions: Array<String>) {
//权限被授予了
}
override fun onDenied(permissions: Array<String>, never: Boolean) {
if (never) {
//权限被永久拒绝了
} else {
//权限第一次被拒绝
}
}
})
跳转app设置界面
PkPermission.toAppSetting(this@MainActivity)
一点点知识
shouldShowRequestPermissionRationale
- 第一次请求时为false
- 第一次请求被禁止,但未选择[不再提醒]为true
- 允许权限后为false
- 第二次请求被禁止为false/禁止时选择了不再提示为false
申请单个权限
- Google的代码示例:github.com/android/per…
隐私相关
- 现在工信部查的越来越严,关于权限这里,建议大家就是最小化,尽可能不要一个功能申请几个权限组,保证一个功能申请一个权限
- 定位权限比较特殊,10.0以后新增了一个ACCESS_BACKGROUND_LOCATION权限
android 10.0
1、ACCESS_BACKGROUND_LOCATION是Android 10新增的,10.0以前谷歌提供了兼容性方案,只要应用申请了老的位置权限ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION,会默认请求ACCESS_BACKGROUND_LOCATION权限
2.大于10.0 如果应用必须要始终定位,可以只申请ACCESS_BACKGROUND_LOCATION即可;如果应用只需要申请前台定位,则只需要申请老的定位权限即可
android 11.0
1.先申请前台位置信息访问权限
2.在申请后台位置信息访问权限,引导用户到设置中进行授予
android 12.0
1.Android 12 或更高版本为目标平台的应用时,用户可以请求应用只能访问大致位置信息
2.请求 ACCESS_FINE_LOCATION运行时权限,您还必须请求 ACCESS_COARSE_LOCATION权限。不要单独申请ACCESS_FINE_LOCATION运行时权限
- 我项目目前是对定位进行了相关处理,大家可以放心使用,不需要做额外的处理
发表回复
要发表评论,您必须先登录。