1.Compose权限申请
第一种写法(androidx.activity:activity-compose:1.7.0)
@Composable
fun FileBrowserPage(navController: NavController, vm: FileBrowserViewModel = viewModel()) {
LazyColumn {
...
}
// 授权回调
val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.RequestPermission()) {
if (it) {
// 已授权
}
}
val mainScope = rememberCoroutineScope()
LaunchedEffect(Unit) {
mainScope3.launch {
vm.event.collect { event ->
when (event) {
is FileBrowserEvent.RequestPermission -> {
// 申请权限
launcher.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
}
is FileBrowserEvent.ExitPage -> {
navController.popBackStack()
}
}
}
}
}
}
第二种写法(com.google.accompanist:accompanist-permissions:0.24.7-alpha)
@Composable
fun FileBrowserPage(navController: NavController, vm: FileBrowserViewModel = viewModel()) {
LazyColumn {
...
}
// 申明权限
val multiplePermissionState = rememberMultiplePermissionsState(
listOf(
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
)
)
// 判断是否授权
if (multiplePermissionState.allPermissionsGranted) {
vm.emitIntent(FileBrowserIntent.GrantPermission)
}
val mainScope = rememberCoroutineScope()
LaunchedEffect(Unit) {
mainScope.launch {
vm.event.collect { event ->
when (event) {
is FileBrowserEvent.RequestPermission -> {
// 申请权限
multiplePermissionState.launchMultiplePermissionRequest()
}
is FileBrowserEvent.ExitPage -> {
navController.popBackStack()
}
}
}
}
}
}
2.获取Context
val context = LocalContext.current
3.监听返回键
@Composable
fun FileBrowserPage(navController: NavController, vm: FileBrowserViewModel = viewModel()) {
LazyColumn {
...
}
BackHandler {
// 返回按钮点击
}
}