如何在 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-compose
的 1.3.0-alpha06
开始,您可以使用 rememberLauncherForActivityResult
向 Activity#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")
}
我有一个应用程序需要在 运行 时间请求权限。
我进行了搜索,但找不到有关如何在 Jetpack Compose 中执行此操作的解决方案。
我如何在 运行 时从 @Composable
函数获得 request/check 权限? (我的函数嵌套很深,所以我无法访问 activity 实例)
我想要这样的东西:
@Composable()
fun test() {
val hasPermission = checkPermission("READ_CONTACTS")
if (hasPermission)
LoadData()
else
requestPermission("READ_CONTACTS")
}
从 androidx.activity:activity-compose
的 1.3.0-alpha06
开始,您可以使用 rememberLauncherForActivityResult
向 Activity#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")
}