返回

Android 6.0 中如何同时请求多个权限?

Android

Android 6.0 中同时请求多个权限

简介

在 Android 6.0(API 级别 23)中,运行时权限模型允许应用程序在运行时请求对某些敏感权限的访问权限,而不是在安装时请求所有权限。为了同时请求多个权限,你可以使用 requestPermissions() 方法。

同时请求多个权限

要同时请求多个权限,请使用 requestPermissions() 方法。这个方法接受一个字符串数组作为参数,其中包含要请求的权限。例如,以下代码请求对短信、相机和联系人权限的访问权限:

val permissions = arrayOf(
    Manifest.permission.SEND_SMS,
    Manifest.permission.CAMERA,
    Manifest.permission.READ_CONTACTS
)
ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE)

系统会显示一个权限请求对话框,列出所请求的权限。用户可以授予或拒绝每个权限。

处理请求结果

用户做出决定后,onRequestPermissionsResult() 方法会被调用。你可以使用 grantResults 数组来确定哪些权限已被授予。如果用户授予所有权限,则你可以继续使用它们。如果用户拒绝任何权限,则你应该相应地处理此情况。

代码示例

以下是同时请求对短信、相机和联系人权限的访问权限的完整代码示例:

private val PERMISSION_REQUEST_CODE = 123

private fun requestPermissions() {
    val permissions = arrayOf(
        Manifest.permission.SEND_SMS,
        Manifest.permission.CAMERA,
        Manifest.permission.READ_CONTACTS
    )

    ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE)
}

override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    when (requestCode) {
        PERMISSION_REQUEST_CODE -> {
            if (grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
                // 所有权限都已授予
            } else {
                // 至少一个权限被拒绝
            }
        }
    }
}

注意事项

  • 你只能同时请求一组权限。
  • 对于每个权限组,你必须使用不同的 PERMISSION_REQUEST_CODE

常见问题解答

  1. 为什么在 Android 6.0 中需要运行时权限?
    为了保护用户隐私和提高应用程序安全性。

  2. 如何检查权限是否已授予?
    使用 ContextCompat.checkSelfPermission() 方法。

  3. 用户可以随时撤销权限吗?
    是的,用户可以通过应用程序设置撤销权限。

  4. 如果用户拒绝权限,该怎么办?
    你应该提供一种替代方式来完成任务或解释为什么权限是必要的。

  5. 如何处理拒绝的权限?
    你可以使用 shouldShowRequestPermissionRationale() 方法来检查用户是否之前拒绝过该权限。如果他们拒绝了,你可以提供一个解释,为什么需要该权限。