[英]In android jetpack compose when using accompanist permission how to detect if user revoked permission i.e. denied permission twice
我想知道如何检测用户何时在伴奏权限库中撤销了权限(两次拒绝权限),我还检查了该库的 GitHub 存储库和样本是旧的。
我在用,
compose_version = '1.2.0-alpha03'
accompanist_version = '0.24.2-alpha'
这是我的代码片段,
@ExperimentalMaterial3Api
@ExperimentalPermissionsApi
@Composable
fun CameraPermission() {
/* Camera permission state.*/
val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA)
val context = LocalContext.current
val intent =Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", BuildConfig.APPLICATION_ID, null))
when (cameraPermissionState.status) {
/* If the camera permission is granted, then show screen with the feature enabled.*/
PermissionStatus.Granted -> {
Text("Camera permission Granted")
}
is PermissionStatus.Denied -> {
/*
* This is a rationale explaining why we need the camera permission.
* We are displaying this because the user has denied the permission once.
* */
if (cameraPermissionState.status.shouldShowRationale) {
/*
* If the user has denied the permission but the rationale can be shown, then gently
* explain why the app requires this permission
* */
Column {
Text(text = "The camera is important for this app. Please grant the permission.")
Button(onClick = { cameraPermissionState.launchPermissionRequest() }) {
Text("Grant permission")
}
}
} else {
/*
* If it's the first time the user lands on this feature, or the user doesn't want to
* be asked again for this permission, explain that the permission is required
* */
Column {
Text(text = "Camera permission required for this feature to be available. Please grant the permission")
Button(onClick = { cameraPermissionState.launchPermissionRequest() }) {
Text("Grant permission")
}
/*todo("permission denied twice.")*/
Text(text = "Camera permission denied twice. Please grant the permission")
Button(
onClick = {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
}
) {
Text("Open settings to grant permission.")
}
}
}
}
}
}
您需要启动 launchPermissionRequest 以获得足够的信息
var permissionAlreadyRequested by rememberSaveable {
mutableStateOf(false)
}
val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA) {
permissionAlreadyRequested = true
}
if (!permissionAlreadyRequested && !cameraPermissionState.shouldShowRationale) {
SideEffect {
cameraPermissionState.launchPermissionRequest()
}
} else if (cameraPermissionState.shouldShowRationale) {
ShowRationaleContent {
cameraPermissionState.launchPermissionRequest()
}
} else {
ShowOpenSettingsContent {
context.openSettings()
}
}
如果有人想要获得多重许可。 这就是我必须处理的方式
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun RequestPermission(context: Context?,onPermissionsGranted:()->Unit) {
val permissionAlreadyRequested = rememberSaveable {
mutableStateOf(false)
}
val permissionState = rememberMultiplePermissionsState(
permissions =
listOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
) {
permissionAlreadyRequested.value = true
if (!it.values.contains(false)){
onPermissionsGranted.invoke()
}
}
if (!permissionAlreadyRequested.value && !permissionState.shouldShowRationale) {
SideEffect {
permissionState.launchMultiplePermissionRequest()
}
} else if (permissionState.shouldShowRationale) {
ShowRationaleContent {
permissionState.launchMultiplePermissionRequest()
}
} else {
ShowOpenSettingsContent {
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val uri: Uri = Uri.fromParts("package", context.packageName, null)
intent.data = uri
context.startActivity(intent)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.