0Pricing
Android Academy · 课时

处理拒绝和说明理由

解释为什么需要某项权限

处理拒绝和说明理由 是 CoddyKit 上的免费 Android Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。

处理拒绝

用户可以拒绝某项权限,也可以永久拒绝。完善的应用会妥善处理所有状态:已授权、拒绝一次,以及选择了“不要再询问”后拒绝。

三种可能的状态

请求权限后,您可能处于以下三种状态之一:

  • 已授权:继续使用该功能
  • 已拒绝(可以再次请求):进行说明后再次请求
  • 永久拒绝:对话框不再出现;引导用户前往设置

什么是说明

说明是对应用需要某项权限的原因所作的简短解释。Android 会通过 shouldShowRequestPermissionRationale 告诉您何时应显示说明。

shouldShowRequestPermissionRationale

当用户至少拒绝过一次权限,但没有选择“不要再询问”时,此方法会返回 true。这表示您应先进行说明,再次请求权限。

val activity = LocalContext.current as Activity
val showRationale = ActivityCompat
    .shouldShowRequestPermissionRationale(
        activity,
        Manifest.permission.CAMERA
    )

解读信号

请将该值与授权检查结合起来解读:

  • 已授权:无需执行任何操作
  • 未授权且 shouldShowRationale == true:显示说明,然后再次请求
  • 未授权且 shouldShowRationale == false:可能是首次请求,也可能是永久拒绝

显示说明对话框

需要说明时,请在再次发起系统请求前显示友好的对话框,让用户了解授权的价值。

if (showRationale) {
    AlertDialog(
        onDismissRequest = { },
        title = { Text("Camera needed") },
        text = { Text("We use the camera to scan codes.") },
        confirmButton = {
            TextButton(onClick = {
                launcher.launch(Manifest.permission.CAMERA)
            }) { Text("Continue") }
        }
    )
}

检测永久拒绝

如果用户已经被请求过权限,而权限仍未授予,并且 shouldShowRationale 为 false,就应将其视为永久拒绝。系统对话框之后不会再出现。

跟踪是否请求过权限

由于首次请求时 shouldShowRationale 也为 false,请跟踪一个标志(例如保存在 DataStore 中),记录您至少请求过一次,这样才能区分首次请求和永久拒绝。

引导用户前往设置

对于永久拒绝,您无法再次弹出请求。请提供一个按钮,打开应用的设置页面,让用户手动授予权限。

fun openAppSettings(context: Context) {
    val intent = Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", context.packageName, null)
    )
    context.startActivity(intent)
}

设计拒绝状态界面

用户拒绝权限时,绝不要留下空白或无法使用的界面。请显示清晰的消息,说明影响,并提供适当的操作:再次请求、打开设置,或继续使用功能受限的版本。

尊重用户的选择

不要反复打扰用户。如果用户拒绝了权限,不要在每个界面都向其反复请求。只有当用户执行了需要该功能的操作时才再次请求,否则应优雅地降低功能。

快速检查

测试您对拒绝和说明机制的理解。

回顾

您已经学会了处理权限拒绝:

  • 三种状态:已授权、已拒绝、永久拒绝
  • shouldShowRequestPermissionRationale 会提示何时需要进行说明
  • 跟踪是否请求过权限,以检测永久拒绝
  • 对于永久拒绝,将用户引导至应用设置
  • 设计清晰的拒绝状态界面,避免反复打扰用户

下一节:隐私最佳实践。

常见问题解答

「处理拒绝和说明理由」课时是免费的吗?

是的 — 「处理拒绝和说明理由」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。

「处理拒绝和说明理由」这节课中我会学到什么?

解释为什么需要某项权限 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「处理拒绝和说明理由」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Android 权限模型
  2. 在 Compose 中请求权限
  3. 处理拒绝和说明理由
  4. 隐私最佳实践
← 返回 Android Academy