Creación de diálogos de permisos reutilizables en Android

Clase 20 de 33Curso de Android: Integración de APIs nativas

Resumen

En el desarrollo de aplicaciones Android, es importante explicar claramente a los usuarios por qué necesitamos ciertos permisos. Un diálogo bien diseñado puede mejorar significativamente la aceptación o rechazo informado por parte de quienes utilizan la aplicación. Aquí aprenderemos a crear un diálogo de tipo Permission Rationale en la capa de presentación que mejore esta experiencia y sea reutilizable en múltiples escenarios fácilmente.

¿Por qué es clave explicar los permisos mediante diálogos?

Cuando pedimos permisos delicados como localización, notificaciones o acceso a la cámara, es necesario justificar claramente su uso ante nuestros usuarios. Crear diálogos explicativos facilita que ellos tomen decisiones conscientes, lo que mejora la transparencia y confianza en la aplicación.

Para ello, incorporaremos una clase específica denominada Permission Rationale Dialog, que permitirá crear mensajes personalizados y reutilizables.

¿Cómo crear un diálogo tipo Permission Rationale en tu app Android?

El procedimiento es sencillo y práctico. Debes crear dentro de tu capa de presentación un paquete llamado dialogos. Dentro de este, crearás una clase de tipo composable denominada PermissionRationaleDialog, siguiendo esta estructura:

private fun PermissionRationaleDialog(
    title: String,
    message: String,
    confirmButtonText: String,
    dismissButtonText: String,
    onDismiss: () -> Unit,
    onAccept: () -> Unit
){
    AlertDialog(
        onDismissRequest = onDismiss,
        title = { Text(text = title) },
        text = { Text(text = message) },
        confirmButton = {
            Button(onClick = onAccept) {
                Text(text = confirmButtonText)
            }
        },
        dismissButton = {
            Button(onClick = onDismiss) {
                Text(text = dismissButtonText)
            }
        }
    )
}

En la definición:

  • title: título del diálogo.
  • message: explicación sobre la necesidad del permiso.
  • confirmButtonText y dismissButtonText: permiten personalizar mensajes de botones.
  • onDismiss y onAccept: acciones que manejarán las respuestas del usuario.

¿Cómo gestionar el diálogo según cada permiso solicitado?

Para administrar distintos permisos, usa una estructura tipo switch-case o when en Kotlin. Esto simplificará y ordenará el diálogo según las situaciones específicas como localización, notificación o acceso a cámara.

Ejemplo práctico del manejo de mensajes:

when {
    showCameraRationale -> showCameraRationaleDialog()
    showLocationRationale -> showLocationRationaleDialog()
    showNotificationRationale -> showNotificationRationaleDialog()
}

En cada opción, el mensaje explica claramente para qué sirve cada permiso individualmente, o de forma combinada según el caso que corresponda.

¿Cómo aprovechar recursos de strings para los diálogos?

Es recomendable utilizar recursos de strings para los textos usados en el diálogo, garantizando flexibilidad y facilidad para futuras traducciones y modificaciones rápidas:

<string name="camera_rationale_message">La cámara es requerida para...</string>
<string name="notification_rationale_message">Las notificaciones son necesarias para...</string>
<string name="location_rationale_message">La localización es necesaria para...</string>

Estos strings quedan fácilmente disponibles para cualquier otro diálogo que surja durante el desarrollo de la app.

Te invitamos a compartir tus dudas o experiencias en la implementación de este tipo de diálogos en tus proyectos Android.