Android 11 权限授权回调

介绍

在 Android 11 中,权限授权的方式发生了变化。以往我们使用的 requestPermissions() 方法已经被废弃,取而代之的是新的方式。本文将介绍 Android 11 权限授权回调的使用方法,并提供代码示例。

Android 11 权限授权回调

在 Android 11 中,使用 ActivityResultContract 来请求权限和接收权限授权的结果。这是一种更简洁和可读性更高的方式。下面是一个示例代码,演示如何请求一个权限:

private val requestPermission = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
    if (isGranted) {
        // 权限已授权
        // 执行相关操作
    } else {
        // 权限被拒绝
        // 提示用户进行授权
    }
}

在上面的示例中,我们使用 registerForActivityResult() 方法来注册一个权限请求回调。回调函数中的 isGranted 参数表示权限是否被授权。如果权限被授权,我们可以执行相关操作。如果权限被拒绝,我们可以提示用户进行授权。

使用权限授权回调

要使用权限授权回调,只需要在需要请求权限的地方调用 requestPermission.launch() 方法即可。下面是一个示例代码,演示如何请求存储权限:

private fun requestStoragePermission() {
    requestPermission.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}

在上面的示例中,我们调用 requestStoragePermission() 方法来请求存储权限。如果权限被授权,回调函数中的 isGranted 参数将为 true,我们可以执行相应的操作。如果权限被拒绝,isGranted 参数将为 false,我们可以提示用户进行授权。

权限授权回调的工作原理

下面是一个使用 sequenceDiagram 标识的序列图,展示了权限授权回调的工作原理:

sequenceDiagram
    participant User
    participant Activity
    participant PermissionsContract
    participant PermissionRequestCallback

    User->>Activity: 请求权限
    Activity->>PermissionsContract: 调用 requestPermissions()
    PermissionsContract->>Activity: 弹出权限对话框
    Activity->>User: 显示权限对话框
    User->>Activity: 选择权限
    Activity->>PermissionsContract: 授权结果
    PermissionsContract->>PermissionRequestCallback: 调用回调函数
    PermissionRequestCallback->>Activity: 执行相应操作

在上面的序列图中,用户请求权限后,Activity 调用 PermissionsContract 的 requestPermissions() 方法,并弹出权限对话框。用户选择权限后,PermissionsContract 将授权结果传递给回调函数,并执行相应操作。

权限授权回调的旅程

下面是一个使用 journey 标识的旅程图,展示了权限授权回调的旅程:

journey
    title 权限授权回调的旅程

    section 请求权限
        User->Activity: 请求权限

    section 授权流程
        Activity->PermissionsContract: 调用 requestPermissions()
        PermissionsContract->Activity: 弹出权限对话框
        Activity->User: 显示权限对话框
        User->Activity: 选择权限
        Activity->PermissionsContract: 授权结果

    section 执行操作
        PermissionsContract->PermissionRequestCallback: 调用回调函数
        PermissionRequestCallback->Activity: 执行相应操作
    end

在上面的旅程图中,用户请求权限后,Activity 调用 PermissionsContract 的 requestPermissions() 方法,并弹出权限对话框。用户选择权限后,PermissionsContract 将授权结果传递给回调函数,并执行相应操作。

结论

在 Android 11 中,我们可以使用 ActivityResultContract 来请求权限和接收权限授权的结果。这种方式更简洁和可读性更高,可以让我们更方便地处理权限授权的逻辑。我们可以使用 registerForActivityResult() 方法注册权限请求回调,并在需要请求权限的地方调用 requestPermission.launch() 方法。在回调函数中,我们可以根据权限的授权情况执行相应的操作。

希望本文对你理解 Android 11 权限授权