Raj*_*Raj 9 android android-permissions android-11
在Android 11中,当用户对任何权限请求多次选择“拒绝”选项时,系统会将其标记为“永久拒绝”。一旦永久拒绝,用户必须在设置中启用。从此时开始shouldShowRequestPermissionRationale()返回false
权限窗口有“拒绝”、“全部允许”、“仅允许本次”三个选项。但在设置中存在“拒绝”、“始终允许”、“每次询问”。
如何查找用户何时从设置中选择“每次询问我”,because、checkSelfPermission()returnPackageManager.PERMISSION_DENIED和shouldShowRequestPermissionRationale()return false。这次我想显示权限窗口,而不是移动到设置。类似于谷歌地图权限的东西
Kar*_*kar 10
使用新的 ActivityResultsContract,您可以通过以下方式执行此操作
private val requestPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { result: MutableMap<String, Boolean> ->
val deniedList: List<String> = result.filter {
!it.value
}.map {
it.key
}
when {
deniedList.isNotEmpty() -> {
val map = deniedList.groupBy { permission ->
if (shouldShowRequestPermissionRationale(permission)) DENIED else EXPLAINED
}
map[DENIED]?.let {
// request denied , request again
}
map[EXPLAINED]?.let {
//request denied ,send to settings
}
}
else -> {
//All request are permitted
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 OnCreate() 中[确保在 OnCreate 中请求权限,否则应用程序将崩溃],请求权限:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestPermissionLauncher.launch(REQUIRED_PERMISSIONS)
}
Run Code Online (Sandbox Code Playgroud)
按以下方式询问 requiredPermissions:
private val REQUIRED_PERMISSIONS = arrayOf(
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7776 次 |
| 最近记录: |