如何在 Jetpack Compose 中请求权限?

How to request permissions in Jetpack Compose?

我有一个应用程序需要在 运行 时间请求权限。
我进行了搜索,但找不到有关如何在 Jetpack Compose 中执行此操作的解决方案。

我如何在 运行 时从 @Composable 函数获得 request/check 权限? (我的函数嵌套很深,所以我无法访问 activity 实例)

我想要这样的东西:

@Composable()
fun test() {
  val hasPermission = checkPermission("READ_CONTACTS")
  if (hasPermission)
    LoadData()
  else
    requestPermission("READ_CONTACTS")
}

androidx.activity:activity-compose1.3.0-alpha06 开始,您可以使用 rememberLauncherForActivityResultActivity#startActivityForResult 注册请求。

类似于:

val launcher = rememberLauncherForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            // Permission Accepted 
        } else {
            // Permission Denied 
        }
    }

那就用吧:

val context = LocalContext.current

Button(
    onClick = {
        
        when {
            //Check permission
            ContextCompat.checkSelfPermission(
                context,
                Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_GRANTED -> {
                // You can use the API that requires the permission.

            } else -> {
                 // Asking for permission
                 launcher.launch(Manifest.permission.CAMERA)
            }
        }
    }
) {
    Text(text = "Button")
}