直接上代码:
主页布局
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"