name: portada class: portada-slide, center, middle # Gestió de permisos ## Android --- # Android - En les següents classes utitlizarem la camera, Google Maps, etc. - Són processos que no existeixen en multiplataforma - Farem només la versió android - carpeta androidMain --- # Gestió de permisos - Hi ha aplicacions que ofereixen unes funcionalitats especials a l’usuari com poden ser accedir a la càmera del dispositiu, obtenir la localització exacta del dispositiu, accedir a determinats directoris del sistema (com galeria de fotos), etc. - Aquestes funcionalitats són especials perquè requereixen que l’usuari doni permís perquè l’app pugui realitzar les accions necessàries. - En aquest document veurem com gestionar els permisos de les nostres aplicacions. --- # Gestió de permisos - Per entendre el codi que veurem a continuació, hem de saber com funciona la gestió de permisos tradicional: - L’app demana permisos a l’usuari, que té dues opcions: - Acceptar els permissos. Ja no s’ha de fer res més. - Rebutjar els permissos. - Si l’usuari ha rebutjat una vegada els permisos, l’app pot tornar a demanar-li, però aquesta vegada amb l’opció “No tornar a demanar”. - Si l’usuari rebutja per segona vegada els permisos, l’app ja no tornarà a demanar-li i podem adreçar-lo a la pantalla de configuració de l’app --- # Camera Per poder utilitzar la càmera del dispositiu des de la nostra app, primer haurem d’afegir les següents línies al Manifest: ```
``` --- # Gradle ``` implementation("com.google.accompanist:accompanist-permissions:0.37.2") ``` --- # Request permission ``` @OptIn(ExperimentalPermissionsApi::class) @Composable private fun FeatureThatRequiresCameraPermission() { // Camera permission state val cameraPermissionState = rememberPermissionState( android.Manifest.permission.CAMERA ) if (cameraPermissionState.status.isGranted) { Text("Camera permission Granted") } else { Column { val textToShow = if (cameraPermissionState.status.shouldShowRationale) { // If the user has denied the permission but the rationale can be shown, // then gently explain why the app requires this permission "The camera is important for this app. Please grant the permission." } else { // If it's the first time the user lands on this feature, or the user // doesn't want to be asked again for this permission, explain that the // permission is required "Camera permission required for this feature to be available. " + "Please grant the permission" } Text(textToShow) Button(onClick = { cameraPermissionState.launchPermissionRequest() }) { Text("Request permission") } } } } ```