Cuando queremos acceder a ciertas funcionalidades del sistema operativo android o funcionalidades hardware del teléfono, como GPS, cámara, etc. debemos solicitar permiso al usuario. Esto se tiene que realizar de un modo específico para proteger la seguridad del usuario. Es él quien nos tiene que autorizar a utilizar esas funcionalidades, pues normalmente nos van a permitir acceder a ciertos datos personales y/o sensibles.
¿Cómo funciona el sistema de permisos en Android Studio?
Existen dos tipos de permisos: los permisos sensibles y los no sensibles. Entre los sensibles, por ejemplo, se encuentra el acceso a la cámara, al GPS o a la tarjeta de memoria. Piénsalo bien, si tenemos acceso como desarrolladores a esa información, la podríamos guardar en cualquier sitio, distribuirla y utilizarla para lo que quisiéramos; es una forma de proteger la intimidad de nuestros usuarios.
En cuanto a los permisos no sensibles podemos encontrar el de acceso a internet; está claro que si vas a usar una app entiendes que necesita tener conectividad a internet de manera general (aunque haya apps que funcionen sin tener que estar conectadas, se asume que la gran mayoría sí que necesitan usar internet).
Así que, hasta que se liberó la versión de Android 6, bastaba con especificar en el Manifest de la app qué permisos se iban a utilizar, y, cuando el usuario iba a instalarla, le salía un diálogo popup en el que se le especificaba un listado con estos permisos, ya era responsabilidad del usuario aceptarlos e instalar la app, o denegarlos, renunciando al uso de la aplicación.
Pero entonces desde Android se decició cambiar este modo de operar y se especificó que, a partir de ese momento, los permisos se tenían que solicitar al usuario de uno en uno y, preferiblemente, cuando el usuario fuera a utilizar esa funcionalidad; por ejemplo, si tenemos una app que lee noticias de un feed y también permite subir fotos, antes el usuario tenía que darnos el permiso de la cámara para poder usar el visor de feeds, ya que si no aceptaba todos los permisos no iba a poder utilizar la aplicación; mientras que ahora puede no dar el permiso de la cámara y seguir utilizando el lector de feeds sin problemas.
Esto, que es un gran salto de calidad para los usuarios (pueden usar muchas apps sin tener que dar permiso a todo), se convirtió en un quebradero de cabeza para los programadores, pues tenían que aprender a implementar esta nueva forma de solicitud de permisos. ¿Quieres aprender a hacerlo? ¡Vamos allá!
Cómo preguntar al usuario si nos da permiso en Android
Para cumplir correctamente con el algoritmo de petición de permisos, hay que seguir los siguientes pasos
Definir el permiso en el manifest
Lo primero que hay que hacer es especificar el permiso que queremos utilizar en el Android Manifest. De este modo tendremos accesibles fácilmente todos los permisos que requiere la app.
Solicitar el permiso en el momento justo
Justo cuando se vaya a necesitar la funcionalidad es cuando debemos pedir el permiso, de forma que el usuario pueda identificar exactamente cuándo nos va a dar su permiso expreso para acceder a la funcionalidad que se califica como «de acceso a datos sensibles».
Preguntar a Android si ya está aceptada
Preguntaremos al sistema operativo si el permiso ya ha sido concedido previamente por el usuario. Así, que pueden pasar dos cosas, que ya esté concedido previamente o que no esté concedido.
Si ya está concedido…
Perfecto, lanzamos la función y tenemos permiso para acceder a esos datos o funcionalidades.
Si no está concedido…
Esto puede ocurrir bien porque sea la primera vez que lo pedimos, o porque el usuario lo haya cancelado siempre. También existe la posibilidad de que alguna vez estuviera concedido pero lo haya denegado en algún momento. En cualquier caso este es el momento de lanzar el diálogo en el que le preguntamos si nos lo concede, con lo que podemos obtener dos respuestas. Nos lo concede, o no.
Si dice que sí…
Perfecto, accedemos a la funcionalidad.
Si dice que no…
Mostramos un mensaje del estilo de «necesitamos el permiso para poder ofrecerte este servicio» y no utilizamos la funcionalidad.
Esta serie de pasos puede parecer un poco compleja de entender al principio, pero es fácil si la vemos como un gráfico y lo vamos siguiendo. Cuando la leas dos o tres veces, lo encontrarás como algo lógico.
Una vez tenemos claro el concepto, debemos pasar a la acción con el código. Te invito a que veas el siguiente vídeo, donde vas a aprender a utilizar el GPS y la cámara en una app. ¿Te animas? Aquí te lo dejo.
Aquí tienes el repositorio del código en github.