https://kotlinlang.org logo
Title
m

Manuel Lorenzo

08/24/2022, 1:59 PM
I’m having some issues with Accompanist permissions and Compose: I grant the permissions to my app, but if I close it and open it again, I see that the permissions are denied (like they’re never saved or persisted). Here’s the code 🧵
@OptIn(ExperimentalPermissionsApi::class)
    @Composable
    fun RequestPermissions(content: @Composable () -> Unit) {
        val permissionsState =
            rememberPermissionState(
                permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                    Manifest.permission.MANAGE_EXTERNAL_STORAGE
                } else {
                    Manifest.permission.READ_EXTERNAL_STORAGE
                }
            )
        when (permissionsState.permission) {
            Manifest.permission.READ_EXTERNAL_STORAGE -> {
                when {
                    permissionsState.status.isGranted -> {
                        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
                            content()
                        }
                    }
                    permissionsState.status.shouldShowRationale -> {
                        Text(text = "Permission is needed")
                    }
                    !permissionsState.status.isGranted && !permissionsState.status.shouldShowRationale -> {
                        requestStoragePermission(this@MainActivity)
                    }
                }
            }
            Manifest.permission.MANAGE_EXTERNAL_STORAGE -> {
                when {
                    permissionsState.status.isGranted -> {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                            content()
                        }
                    }
                    permissionsState.status.shouldShowRationale -> {
                        Text(text = "Permission is needed")
                    }
                    !permissionsState.status.isGranted && !permissionsState.status.shouldShowRationale -> {
                        requestStoragePermission(this@MainActivity)
                    }
                }
            }
        }
    }
}