Actualizaciones de permisos en Android 11

Android 11 brinda a los usuarios la capacidad de especificar permisos más detallados de ubicación, micrófono y cámara. Esta versión de Android también actualiza el modelo de permisos para leer información relacionada con los números de teléfono.

Nos interesan tus comentarios. Responde esta breve encuesta para contarnos cómo utilizas la función. En concreto, queremos conocer casos prácticos afectados por esta característica.

Permisos únicos

En Android 11, cada vez que la app solicita un permiso relacionado con la ubicación, el micrófono o la cámara, el diálogo de permisos para el usuario contiene una opción llamada Solo esta vez. Si el usuario selecciona esta opción, se le otorgará un permiso único temporal a la app.

Luego, la app podrá acceder a los datos relacionados durante un período que dependerá del comportamiento de tu app y de las acciones del usuario:

  • Mientras sea visible la actividad de la app, podrá acceder a los datos.
  • Si el usuario lleva la app a segundo plano, esta podrá seguir accediendo a los datos durante un breve período de tiempo.
  • Si inicias un servicio en primer plano mientras la actividad está visible y el usuario mueve la app a segundo plano, esta puede continuar accediendo a los datos hasta que se detenga ese servicio.
  • Si el usuario revoca el permiso único (por ejemplo, en la configuración del sistema), la app no podrá acceder a los datos, independientemente de si iniciaste un servicio en primer plano. Al igual que con cualquier otro permiso, si el usuario revoca el permiso único de la app, finalizará el proceso de tu app.

Nota: Si la app ya cumple con las prácticas recomendadas para permisos, no necesitas cambiarla a fin de que sea compatible con los permisos únicos. En particular, asegúrate de verificar siempre que la app tenga permiso antes de intentar acceder a información protegida por ese permiso, y completar el siguiente proceso si la aplicación solicita el permiso por primera vez, o si el usuario lo revocó:

  1. Llama al método shouldShowRequestPermissionRationale(). Si el resultado es verdadero, muestra un elemento de la IU en tu app que explique al usuario por qué la app necesita el permiso.
  2. Solicita el permiso.

Diálogo que se muestra cuando se vuelve a solicitar permiso

Cuando el usuario vuelva a abrir la app y esta le vuelva a solicita un permiso relacionado con la ubicación, el micrófono o la cámara, el usuario recibirá la solicitud. En la tabla 1, se muestran varios ejemplos del diálogo que podría ver el usuario:

Tabla 1: Tipos de diálogo que ve el usuario cuando vuelve a solicitarse un permiso único
Versión de destino del SDK Tipo de permiso solicitado Diálogo que ve el usuario
Android 10 o posterior ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION Figura 1
Android 10 ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION, y, luego, ACCESS_BACKGROUND_LOCATION Figura 2
Android 10 o anterior Todos los permisos de ubicación disponibles de forma simultánea Figura 3
Se superpone el diálogo con el contenido de la aplicación
Figura 1: Diálogo de permisos que incluye la opción Solo esta vez.
El segundo diálogo presenta un vínculo llamado Permitir en la configuración
Figura 2: Secuencia de diálogos que ve el usuario si una app orientada a Android 10 solicita permisos de ubicación en primer y segundo plano por separado.
El primer diálogo presenta un vínculo llamado Permitir en la configuración
Figura 3: Secuencia de diálogos que ve el usuario si una app orientada a Android 10 o versiones anteriores solicita todos los permisos de ubicación disponibles juntos.

Visibilidad del diálogo de permisos

Android 11 no recomienda enviar solicitudes repetidas de permisos en un grupo de permisos específico. Si el usuario presiona Denegar dos veces para un permiso específico desde el principio durante la instalación de la app en un dispositivo, esta acción implica "no volver a preguntar" para el grupo de permisos correspondiente.

El sistema también define el comportamiento para responder a acciones que emulan presionar la opción Denegar:

  • Si el usuario presiona el botón Atrás para descartar el diálogo de permiso, esto no cuenta como acción de "denegación".
  • Si el usuario accede a la configuración del sistema desde la app mediante requestPermissions(), y luego presiona el botón Atrás, esto se cuenta como una acción de "denegación".

Números de teléfono

Android 11 cambia el permiso relacionado con el teléfono que usa tu app cuando lee números de teléfono.

Si tu app se orienta a Android 11 y necesita acceder a las API de números de teléfono que se muestran en la siguiente lista, debes solicitar el permiso READ_PHONE_NUMBERS en lugar de READ_PHONE_STATE.

Si la app declara que READ_PHONE_STATE llama a métodos distintos de los de la lista anterior, puedes seguir solicitando READ_PHONE_STATE en todas las versiones de Android. Sin embargo, si usas el permiso READ_PHONE_STATE solo para los métodos de la lista anterior, actualiza el archivo de manifiesto de la siguiente manera:

  1. Cambia la declaración de READ_PHONE_STATE para que tu app use el permiso solo en Android 10 (API nivel 29) y versiones anteriores.
  2. Agrega el permiso READ_PHONE_NUMBERS.

El siguiente fragmento de declaración de manifiesto ejemplifica el proceso:

<manifest>
    <!-- Grants the READ_PHONE_STATE permission only on devices that run
         Android 10 (API level 29) and lower. -->
    <uses-permission android:name="READ_PHONE_STATE"
                     android:maxSdkVersion="29" />
    <uses-permission android:name="READ_PHONE_NUMBERS" />
</manifest>