前言
- 在以前我們一直用的是ActivityCompat.requestPermissions()去申請權(quán)限和重寫onRequestPermissionsResult()回調(diào)方法,對授權(quán)結(jié)果進(jìn)行判斷,執(zhí)行后續(xù)操作。
- 但是目前這個方法已經(jīng)過時了,在網(wǎng)上找了一圈,大部分都是老方法,于是就決定自己重寫一套權(quán)限框架。
- 項目地址:https://github.com/Peakmain/BasicLibrary
使用文檔
怎樣使用
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'
}
是否授予權(quán)限
//判斷單個權(quán)限
PkPermission.isGranted(android.Manifest.permission.CAMERA)
//判斷多個權(quán)限
PkPermission.isGranted(
arrayOf(
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
)
)
申請單個權(quán)限
PkPermission.request(this, android.Manifest.permission.CAMERA, object : OnPermissionCallback {
override fun onGranted(permissions: Array<String>) {
Log.e("TAG", "授予了權(quán)限:$permission")
}
override fun onDenied(permissions: Array<String>, never: Boolean) {
Log.e("TAG", "是否永久:$never 拒絕了${permission}權(quán)限")
}
})
申請多個權(quán)限
PkPermission.request(this, location, object : OnPermissionCallback {
override fun onGranted(permissions: Array<String>) {
//權(quán)限被授予了
}
override fun onDenied(permissions: Array<String>, never: Boolean) {
if (never) {
//權(quán)限被永久拒絕了
} else {
//權(quán)限第一次被拒絕
}
}
})
跳轉(zhuǎn)app設(shè)置界面
PkPermission.toAppSetting(this@MainActivity)
一點點知識
shouldShowRequestPermissionRationale
- 第一次請求時為false
- 第一次請求被禁止,但未選擇[不再提醒]為true
- 允許權(quán)限后為false
- 第二次請求被禁止為false/禁止時選擇了不再提示為false
申請單個權(quán)限
- Google的代碼示例:https://github.com/android/permissions-samples/blob/main/PermissionsActivityResultKotlin/Application/src/main/java/com/example/android/basicpermissions/MainActivity.kt
image.png
image.png
隱私相關(guān)
- 現(xiàn)在工信部查的越來越嚴(yán),關(guān)于權(quán)限這里,建議大家就是最小化,盡可能不要一個功能申請幾個權(quán)限組,保證一個功能申請一個權(quán)限
- 定位權(quán)限比較特殊,10.0以后新增了一個ACCESS_BACKGROUND_LOCATION權(quán)限
android 10.0
1、ACCESS_BACKGROUND_LOCATION是Android 10新增的,10.0以前谷歌提供了兼容性方案,只要應(yīng)用申請了老的位置權(quán)限ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION,會默認(rèn)請求ACCESS_BACKGROUND_LOCATION權(quán)限
2.大于10.0 如果應(yīng)用必須要始終定位,可以只申請ACCESS_BACKGROUND_LOCATION即可;如果應(yīng)用只需要申請前臺定位,則只需要申請老的定位權(quán)限即可
android 11.0
1.先申請前臺位置信息訪問權(quán)限
2.在申請后臺位置信息訪問權(quán)限,引導(dǎo)用戶到設(shè)置中進(jìn)行授予
android 12.0
1.Android 12 或更高版本為目標(biāo)平臺的應(yīng)用時,用戶可以請求應(yīng)用只能訪問大致位置信息
2.請求 ACCESS_FINE_LOCATION運(yùn)行時權(quán)限,您還必須請求 ACCESS_COARSE_LOCATION權(quán)限。不要單獨申請ACCESS_FINE_LOCATION運(yùn)行時權(quán)限
- 我項目目前是對定位進(jìn)行了相關(guān)處理,大家可以放心使用,不需要做額外的處理

