Cómo minimizar las solicitudes de permiso

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Antes de declarar los permisos de tu app, evalúa si debes hacerlo. Cada vez que el usuario pruebe una función que requiera un permiso de tiempo de ejecución, tu app deberá interrumpir el trabajo del usuario con una solicitud de permiso. El usuario debe tomar una decisión. Si el usuario no comprende por qué tu app solicita un permiso en particular, es posible que lo rechace o incluso desinstale la app.

Considera si otra app instalada podría realizar la función en nombre de la tuya. En esos casos, delega la tarea a otra app con un intent. Al hacerlo, no es necesario declarar los permisos necesarios, ya que la otra app declara el permiso.

Alternativas a la declaración de permisos

En esta sección, se describen varios casos de uso que tu app puede entregar sin declarar la necesidad de permisos.

Cómo mostrar lugares cercanos

Es posible que tu app necesite conocer la ubicación aproximada del usuario. Esto es útil para mostrar información de reconocimiento de la ubicación, como restaurantes cercanos.

Algunos casos de uso solo requieren una estimación aproximada de la ubicación de un dispositivo. En esas situaciones, realiza una de las siguientes acciones, según la frecuencia con la que tu app necesite información de reconocimiento de la ubicación:

  • Si la app necesita la ubicación con más frecuencia, declara el permiso ACCESS_COARSE_LOCATION. El permiso proporciona una estimación de la ubicación del dispositivo a partir de servicios de ubicación, como se describe en la documentación sobre la exactitud de la ubicación aproximada.
  • Si tu app necesita la ubicación con menos frecuencia o solo una vez, pídele al usuario que ingrese una dirección o un código postal.

Otros casos de uso requieren una estimación más precisa de la ubicación de un dispositivo. Solo en esos casos es correcto declarar el permiso ACCESS_FINE_LOCATION.

Cómo tomar fotos

Es posible que los usuarios tomen fotos en tu app con la app de cámara del sistema preinstalada.

En este caso, no declares el permiso CAMERA. En su lugar, invoca la acción de intent ACTION_IMAGE_CAPTURE.

Cómo grabar videos

Es posible que los usuarios graben videos en tu app con la app de cámara del sistema preinstalada.

En este caso, no declares el permiso CAMERA. En su lugar, invoca la acción de intent ACTION_VIDEO_CAPTURE.

Cómo abrir el contenido multimedia que creó tu app

Tu app puede mostrar contenido multimedia, como fotos o videos, que el usuario creó mientras la usaba. En este caso, no es necesario que uses el permiso READ_EXTERNAL_STORAGE en dispositivos que ejecutan Android 10 (nivel de API 29) ni versiones posteriores, siempre y cuando la app se oriente a estas versiones. Si la app está orientada a Android 10, inhabilita el almacenamiento específico.

Para lograr la compatibilidad con dispositivos más antiguos, declara el permiso READ_EXTERNAL_STORAGE y establece android:maxSdkVersion en 28.

Busca el archivo en una de las siguientes colecciones, que la tienda de contenido multimedia conoce:

Usa ContentResolver para buscar contenido multimedia directamente desde la tienda, en lugar de intentar descubrirlo por tu cuenta.

Cómo abrir documentos

Tu app puede mostrar documentos que el usuario creó, ya sea en tu app o en otra. Un ejemplo común son los archivos de texto.

En este caso, no necesitas usar el permiso READ_EXTERNAL_STORAGE en dispositivos que ejecutan Android 10 o versiones posteriores, siempre y cuando tu app se oriente a estas versiones. Si la app está orientada a Android 10, inhabilita el almacenamiento específico.

Para lograr la compatibilidad con dispositivos más antiguos, declara el permiso READ_EXTERNAL_STORAGE y establece android:maxSdkVersion en 28.

Según la app que haya creado el documento, realiza una de las siguientes acciones:

Cómo identificar el dispositivo que ejecuta una instancia de tu app

Es posible que una instancia específica de tu app necesite saber en qué dispositivo se está ejecutando. Esto es útil para las apps que tienen preferencias o mensajes específicos de dispositivos, como diferentes listas de reproducción para dispositivos de TV y wearables.

En este caso, no accedas directamente al IMEI del dispositivo. De hecho, a partir de Android 10, no puedes hacerlo. Como alternativa, realiza una de las siguientes acciones:

  • Obtén un identificador de dispositivo único para la instancia de tu app mediante la biblioteca de Instance ID.
  • Crea tu propio identificador específico para el almacenamiento de la app. Usa funciones básicas del sistema, como randomUUID().

Cómo vincular un dispositivo mediante Bluetooth

Es posible que tu app ofrezca una experiencia mejorada mediante la transferencia de datos a otro dispositivo a través de Bluetooth.

Para admitir esta función, no declares los permisos ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION ni BLUETOOTH_ADMIN. En su lugar, usa la vinculación de dispositivos complementarios.

Cómo detener contenido multimedia cuando se interrumpe la app

Si el usuario recibe una llamada telefónica o si suena una alarma configurada por él, tu app deberá pausar la reproducción multimedia hasta que recupere el foco de audio.

Para admitir esta función, no declares el permiso READ_PHONE_STATE. En su lugar, implementa el controlador de eventos onAudioFocusChange(), que se ejecuta automáticamente cuando el sistema cambia su foco de audio. Descubre cómo implementar el foco de audio.

Cómo filtrar llamadas telefónicas

A fin de reducir las interrupciones innecesarias para el usuario, tu app puede filtrar llamadas telefónicas de spam.

Para admitir esta función, no declares el permiso READ_PHONE_STATE. En su lugar, usa la API de CallScreeningService.

Cómo realizar llamadas telefónicas

Tu app puede ofrecer la capacidad de realizar una llamada telefónica si presionas la información de un contacto.

Para admitir esta funcionalidad, usa la acción de intent ACTION_DIAL en lugar de la acción ACTION_CALL. ACTION_CALL requiere el permiso en el momento de la instalación CALL_PHONE, que evita que los dispositivos que no pueden realizar llamadas, como algunas tablets, instalen tu aplicación.

Cómo acceder a mensajes SMS

Es posible que tu app necesite acceso a mensajes SMS, por ejemplo, para recibir códigos de autenticación que protejan al usuario contra el fraude.

Para admitir esta funcionalidad, si tu app se orienta a Android 8.0 (nivel de API 26) o versiones posteriores, no solicites el permiso READ_SMS como parte de la verificación de las credenciales del usuario. En su lugar, genera un token específico de la app con createAppSpecificSmsToken() y, luego, pásalo a otra app o servicio que pueda enviar un mensaje de verificación por SMS.