返回

前言:告别繁琐,解锁更便捷的权限管理

Android

告别繁琐,拥抱便捷!Activity Results API 助力权限管理进阶

分层封装,简化流程

安卓权限管理迎来了变革,Activity Results API 横空出世,为权限封装带来了全新的格局。它巧妙地将权限请求与回调处理分离,形成严密的分层体系,降低了耦合度,让权限管理变得模块化和可复用。

无缝集成,高效申请

告别冗长的逐个判断,Activity Results API 让权限申请变得轻而易举。开发者只需调用 ActivityResultLauncher 的 launch() 方法,授权结果将自动传递给 ActivityResultCallback 进行处理,无需再为繁琐的回调编写而烦恼。

自定义处理,灵活应对

Activity Results API 赋予开发者充分的灵活性。根据具体需求,开发者可以定制授权结果的处理方式。比如,用户拒绝授权时,弹出对话框解释后果,引导重新授权,从而提升用户体验。

组合请求,节省时间

对于需要同时申请多个权限的场景,Activity Results API 支持组合请求功能。只需在 ActivityResultLauncher 中指定多个权限,即可一次性发起请求,大幅节省时间和精力。

案例实操,一试便知

申请相机权限

val cameraPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
    if (isGranted) {
        // 权限已授予,执行业务逻辑
    } else {
        // 权限未授予,提示用户
    }
}
cameraPermissionLauncher.launch(Manifest.permission.CAMERA)

拒绝后重新申请

val permissionCallback = object : ActivityResultCallback<Map<String, Boolean>>() {
    override fun onActivityResult(result: Map<String, Boolean>) {
        if (!result.getValue(Manifest.permission.CAMERA)) {
            AlertDialog.Builder(this@MainActivity)
                .setTitle("权限拒绝")
                .setMessage("相机权限被拒绝,无法使用拍照功能。")
                .setPositiveButton("重新授权") { _, _ ->
                    cameraPermissionLauncher.launch(Manifest.permission.CAMERA)
                }
                .setNegativeButton("取消") { _, _ ->
                    // 用户取消了授权操作
                }
                .show()
        }
    }
}

组合权限请求

val multiPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
    permissions.entries.forEach {
        if (it.value) {
            // 该权限已授予
        } else {
            // 该权限未授予
        }
    }
}
multiPermissionLauncher.launch(arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE))

结论:

Activity Results API 如同一柄利刃,斩断了权限管理的繁琐锁链。它以其优雅的设计、便捷的操作和灵活的处理,为开发者开辟了权限管理的新天地。告别过往的桎梏,拥抱 Activity Results API,开启安卓开发的新篇章!

常见问题解答:

  1. Activity Results API 的优势有哪些?

    • 分层封装,降低耦合度
    • 无缝集成,高效申请
    • 灵活处理,自定义授权结果
    • 组合请求,节省时间
  2. 如何使用 Activity Results API 申请相机权限?
    参见文中 申请相机权限 代码示例。

  3. 如何处理用户拒绝授权的情况?
    参见文中 拒绝后重新申请 代码示例。

  4. Activity Results API 是否支持权限组合请求?
    是的,支持。参见文中 组合权限请求 代码示例。

  5. Activity Results API 的使用范围有哪些?
    适用于需要申请安卓权限的所有场景,尤其是需要申请多个权限的复杂场景。