Compose - 权限申请

一、概念

二、使用 Accompanist Permissions

官方介绍&最新版本

不同版本中,权限状态(如PermissionState)中获取属性的方法不同,例如在“0.23.1”中,通过 PermissionState.hasPermission 属性拿到是否通过的 Boolean 值,在“0.35.0-alpha”中,通过 PermissionState.status.isGranted 属性拿到。

单个权限 多个权限

添加权限

@Composable
fun rememberPermissionState(
    permission: String
): PermissionState

@Composable

fun rememberMultiplePermissionsState(
    permissions: List
): MultiplePermissionsState

发起请求

fun launchPermissionRequest(): Unit

 fun launchMultiplePermissionRequest(): Unit

权限回调

@Composable
fun PermissionRequired(
    permissionState: PermissionState,
    permissionNotGrantedContent: @Composable (() -> Unit),
    permissionNotAvailableContent: @Composable (() -> Unit),
    content: @Composable (() -> Unit),

@Composable
fun PermissionsRequired(
    multiplePermissionsState: MultiplePermissionsState,
    permissionsNotGrantedContent: @Composable (() -> Unit),
    permissionsNotAvailableContent: @Composable (() -> Unit),
    content: @Composable (() -> Unit),
)

2.1 添加依赖 

implementation "com.google.accompanist:accompanist-permissions:0.37.0"

2.2 单个权限申请

val permissionState = rememberPermissionState(
    Manifest.permission.CAMERA
)
Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {
    if (permissionState.status.isGranted) {
        Content()
    } else {
        Column(
            modifier = Modifier.fillMaxSize(),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text(
                if (permissionState.status.shouldShowRationale) {
                    //拒绝授权后的提示
                    "摄像头对此应用程序非常重要。请授予权限"
                } else {
                    //第一次用或不再询问后的提示
                    "此功能需要摄像头权限才能使用。请授予权限"
                }
            )
            Button(onClick = { permissionState.launchPermissionRequest() }) {
                Text("申请权限")
            }
        }
    }
}

2.3 多个权限申请

val permissionState = rememberMultiplePermissionsState(
    listOf(
        Manifest.permission.CAMERA,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.RECORD_AUDIO
    )
)

LaunchedEffect(Unit) {
    permissionState.launchMultiplePermissionRequest()
}

三、使用 rememberLauncherForActivityResult

你可能感兴趣的:(Compose,android)