Android 运行时权限是应用开发中的重要环节。Compose 提供了简洁的 API 来处理权限请求。
一、单个权限请求
val permissionLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission()
) { isGranted ->
hasCameraPermission = isGranted
}
Button(onClick = {
permissionLauncher.launch(Manifest.permission.CAMERA)
}) {
Text("请求相机权限")
}
二、多个权限请求
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissionsMap ->
allGranted = permissionsMap.values.all { it }
}
launcher.launch(arrayOf(
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO
))
三、处理永久拒绝
// 引导用户到设置页面
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = Uri.fromParts("package", context.packageName, null)
context.startActivity(this)
}
四、最佳实践
- ✅ 在需要时才请求权限
- ✅ 解释为什么需要权限
- ✅ 处理永久拒绝情况
- ✅ 分步请求敏感权限
- ✅ Android 13+ 单独处理通知权限
总结
- rememberLauncherForActivityResult:请求权限核心 API
- shouldShowRationale:判断是否需要解释
- 永久拒绝:引导到应用设置