jetpack compose 权限获取自定义组件

直接上代码:

主页布局

val list = remember {
        listOf(
          "android.permission.RECORD_AUDIO",
            "android.permission.CAMERA",
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"
        )
    }
    Column(modifier=modifier, horizontalAlignment = Alignment.CenterHorizontally) {
        Column(modifier = Modifier
            .weight(1f)
            .fillMaxWidth()
            .background(color = Color.Red)) {
            
        }
        ClickButtonPermission(modifier = Modifier
            .padding(20.dp)
            .size(100.dp)) {
            Text(text = name,textAlign= TextAlign.Center)
        }
        RequestPermission(permission = list, onPermissionGranted = {
            takePhoto()
        }){
//                isClickPermission = false
        }

    }

RequestPermission

@Composable
fun RequestPermission(permission:List<String>,
                      title:String? = "权限需求",
                      content:String? = "需要这些权限才能使用完整功能",
                      onPermissionGranted:()->Unit,
                      onPermissionFail:()->Unit){
    val permissions = remember {
        permission
    }
    val permissionsState = rememberMultiplePermissionsState(permissions)
    LaunchedEffect(permissionsState) {
        if (!permissionsState.allPermissionsGranted) {
//           permissionsState.launchMultiplePermissionRequest()
        }
    }
    when {
        permissionsState.allPermissionsGranted->{
            onPermissionGranted()
        }
        permissionsState.shouldShowRationale->{
            if (isClickPermission.value){
                AlertDialog(
                    onDismissRequest = { },
                    title = { Text(title?:"权限需求") },
                    text = { Text(content?:"需要这些权限才能使用完整功能") },
                    confirmButton = {
                        Button(onClick = {
                            isClickPermission.value = false
                            permissionsState.launchMultiplePermissionRequest()
                        }) {
                            Text("确定")
                        }
                    }, dismissButton = {
                        Button(onClick = {
                            isClickPermission.value = false
                        }) {
                            Text("取消")
                        }
                    }
                )
            }

        }
        else->{
            onPermissionFail()
            if (isClickPermission.value){
                AlertDialog(
                    onDismissRequest = { },
                    title = { Text(title?:"权限需求") },
                    text = { Text(content?:"需要这些权限才能使用完整功能") },
                    confirmButton = {
                        Button(onClick = {
                            isClickPermission.value = false
                            permissionsState.launchMultiplePermissionRequest()
                        }) {
                            Text("确定")
                        }
                    }, dismissButton = {
                        Button(onClick = {
                            isClickPermission.value = false
                        }) {
                            Text("取消")
                        }
                    }
                )
            }
        }
    }
}

ClickButtonPermission

@Composable
fun ClickButtonPermission(modifier: Modifier = Modifier,

                          enabled: Boolean = true,
                          shape: Shape = ButtonDefaults.shape,
                          colors: ButtonColors = ButtonDefaults.buttonColors(),
                          elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
                          border: BorderStroke? = null,
                          contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
                          interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
                          content: @Composable RowScope.() -> Unit
){
    Button(onClick = {
        isClickPermission.value = true
    }, modifier = modifier,
        enabled=enabled,
        shape=shape,
        colors=colors,
        elevation=elevation,
        border=border,
        contentPadding=contentPadding,
        interactionSource=interactionSource, content = content)
}
val isClickPermission = mutableStateOf(false)

依赖

implementation "com.google.accompanist:accompanist-permissions:0.37.0"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。