Cambios en la privacidad de Android 10

Android 10 (nivel de API 29) presenta una serie de funciones y cambios de comportamiento para proteger mejor la privacidad de los usuarios. Estos cambios extienden la transparencia y el control que tienen los usuarios sobre sus datos y las capacidades que otorgan a las apps. Estas funciones pueden implicar que los comportamientos o datos específicos de los que depende tu app se comporten de manera diferente en comparación con las versiones anteriores de la plataforma. Los impactos en tu app deberían ser mínimos si esta sigue las prácticas recomendadas actuales para administrar los datos de los usuarios.

En esta página, se incluye un resumen de cada cambio.

Cambios principales

En esta sección, se incluyen los cambios clave en Android 10 relacionados con la privacidad.

Acceso al almacenamiento externo específico del contenido multimedia y los archivos de la app

De forma predeterminada, las apps orientadas a Android 10 y versiones posteriores reciben acceso con alcance determinado al almacenamiento externo o almacenamiento específico. Estas apps pueden ver los siguientes tipos de archivos en un dispositivo de almacenamiento externo sin necesidad de solicitar ningún permiso del usuario relacionado con el almacenamiento:

Para obtener más información sobre el almacenamiento específico, así como sobre cómo compartir, acceder y modificar archivos que se guardan en dispositivos de almacenamiento externo, consulta las guías sobre cómo administrar archivos en el almacenamiento externo y acceder a archivos multimedia y modificarlos.

El acceso a la ubicación del dispositivo en segundo plano requiere permiso

Para admitir el control adicional que tienen los usuarios sobre el acceso de una app a la información de ubicación, Android 10 presenta el permiso ACCESS_BACKGROUND_LOCATION.

A diferencia de los permisos ACCESS_FINE_LOCATION y ACCESS_COARSE_LOCATION, el permiso ACCESS_BACKGROUND_LOCATION solo afecta el acceso de una app a la ubicación cuando se ejecuta en segundo plano. Se considera que una app accede a la ubicación en segundo plano, a menos que se cumpla una de las siguientes condiciones:

  • Se muestra una actividad que pertenece a otra app.
  • La app ejecuta un servicio en primer plano que declaró un tipo de servicio en primer plano de location.

    Para declarar el tipo de servicio en primer plano de un servicio en tu app, establece el valor de targetSdkVersion o compileSdkVersion de tu app en 29 o un valor superior. Obtén más información sobre cómo los servicios en primer plano pueden continuar con las acciones iniciadas por el usuario que requieren acceso a la ubicación.

Si tu app crea y supervisa geovallas y se orienta a Android 10 (nivel de API 29) o versiones posteriores, debes declarar el permiso ACCESS_BACKGROUND_LOCATION.

El acceso se otorga automáticamente cuando las apps se orientan a Android 9 o versiones anteriores

Si tu app se ejecuta en Android 10 o versiones posteriores, pero se orienta a Android 9 (nivel de API 28) o versiones anteriores, la plataforma aplica el siguiente comportamiento:

  • Si tu app declara un elemento <uses-permission> para ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, el sistema agrega automáticamente un elemento <uses-permission> para ACCESS_BACKGROUND_LOCATION durante la instalación.
  • Si tu app solicita ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, el sistema agrega automáticamente ACCESS_BACKGROUND_LOCATION a la solicitud.

Acceso cuando el dispositivo se actualiza a Android 10

Si un usuario otorga a tu app acceso a la ubicación del dispositivo (ya sea ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION) y, luego, actualiza su dispositivo de Android 9 a Android 10, el sistema actualiza automáticamente el conjunto de permisos basados en la ubicación que se otorgaron a tu app. El conjunto de permisos que recibe tu app después de la actualización depende de la versión del SDK de destino y de los permisos definidos, como se muestra en la siguiente tabla:

Tabla 1: Cambios en el estado de los permisos de ubicación después de actualizar el dispositivo a Android 10

Versión de la plataforma de destino ¿Se otorgó el permiso aproximado o preciso
?
¿Se definió el permiso de segundo plano
en el manifiesto?
Estado actualizado del permiso predeterminado
Android 10 Sí Sí Acceso en primer y segundo plano
Android 10 Sí No Acceso en primer plano únicamente
Android 10 No (Ignorado por el sistema) Sin acceso
Android 9 o anterior Sí Agregado automáticamente por el sistema durante la actualización del dispositivo Acceso en primer y segundo plano
Android 9 o anterior No (Ignorado por el sistema) Sin acceso

Ten en cuenta que el usuario puede cambiar este nivel de acceso incluso después de que el sistema actualice automáticamente el acceso de tu app a la ubicación del dispositivo. Por ejemplo, el usuario podría reducir el acceso de tu app solo al primer plano o revocarlo por completo. Antes de intentar acceder a la ubicación del dispositivo, en especial dentro de un servicio en primer plano, tu app debe verificar si el usuario aún permite que la app reciba esta información de ubicación.

Acceso revocado cuando se actualiza el nivel de API objetivo en dispositivos con Android 10

Considera el caso en el que tu app ya está instalada en un dispositivo que ejecuta Android 10. Si actualizas tu app para que se oriente a Android 10 en esta situación, el dispositivo revocará el permiso ACCESS_BACKGROUND_LOCATION.

Para obtener más información sobre cómo recuperar la ubicación del dispositivo mientras tu app se ejecuta en segundo plano, consulta la guía para recibir actualizaciones de ubicación periódicas.

Restricciones sobre el inicio de actividades en segundo plano

A partir de Android 10, el sistema impone restricciones para iniciar actividades en segundo plano. Este cambio de comportamiento ayuda a minimizar las interrupciones para el usuario y le permite tener más control sobre lo que se muestra en su pantalla. Siempre que tu app inicie actividades como resultado directo de la interacción del usuario, es muy probable que no se vea afectada por estas restricciones.

Para obtener más información sobre la alternativa recomendada para iniciar actividades en segundo plano, consulta la guía sobre cómo alertar a los usuarios sobre eventos urgentes en tu app.

Identificadores y datos

En esta sección, se enumeran los cambios específicos para trabajar con identificadores y datos del dispositivo.

Eliminación de la afinidad de contactos

A partir de Android 10, la plataforma no hace un seguimiento de la información de afinidad de contactos. Como resultado, si tu app realiza una búsqueda en los contactos del usuario, los resultados no se ordenan por frecuencia de interacción.

La guía sobre ContactsProvider contiene un aviso en el que se describen los campos y métodos específicos que están obsoletos en todos los dispositivos a partir de Android 10.

Aleatorización de direcciones MAC

En los dispositivos que ejecutan Android 10 o versiones posteriores, el sistema transmite direcciones MAC aleatorias de forma predeterminada.

Si tu app controla un caso de uso empresarial, la plataforma proporciona APIs para varias operaciones relacionadas con las direcciones MAC:

  • Obtención de una dirección MAC aleatoria: Las apps de propietario del dispositivo y de propietario del perfil pueden recuperar la dirección MAC aleatoria asignada a una red específica llamando a getRandomizedMacAddress().
  • Obtención de la dirección MAC real de fábrica: Las apps de propietario del dispositivo pueden recuperar la dirección MAC de hardware real de un dispositivo llamando a getWifiMacAddress(). Este método es útil para realizar un seguimiento de varios dispositivos.

Restricciones sobre el acceso al sistema de archivos /proc/net

En dispositivos que ejecutan Android 10 o versiones posteriores, las apps no pueden acceder a /proc/net, que incluye información sobre el estado de la red de un dispositivo. Las apps que necesitan acceso a esta información, como las VPN, deben usar la clase NetworkStatsManager o ConnectivityManager.

Restricciones sobre identificadores de dispositivos que no se pueden restablecer

A partir de Android 10, las apps deben tener el permiso con privilegios READ_PRIVILEGED_PHONE_STATE para acceder a los identificadores del dispositivo que no se pueden restablecer, incluidos el IMEI y el número de serie.

Entre los métodos afectados, se incluyen los siguientes:

Si tu app no tiene el permiso y, de todos modos, intentas solicitar información sobre identificadores que no se pueden restablecer, la respuesta de la plataforma variará según la versión del SDK de destino:

  • Si tu app se orienta a Android 10 o versiones posteriores, se genera una SecurityException.
  • Si tu app se orienta a Android 9 (nivel de API 28) o versiones anteriores, el método devuelve null o datos de marcador de posición si la app tiene el permiso READ_PHONE_STATE. De lo contrario, se produce un SecurityException.

Muchos casos prácticos no necesitan identificadores de dispositivo que no se pueden restablecer. Por ejemplo, si tu app usa identificadores de dispositivo que no se pueden restablecer para el seguimiento de anuncios o el análisis de usuarios, usa un ID de publicidad de Android para esos casos de uso específicos. Para obtener más información, consulta las prácticas recomendadas para identificadores únicos.

Acceso limitado a los datos del portapapeles

A menos que tu app sea el editor de método de entrada (IME) predeterminado o la app que tiene el foco actualmente, no podrá acceder a los datos del portapapeles en Android 10 o versiones posteriores.

Protección del número de serie de dispositivos USB

Si tu app se orienta a Android 10 o versiones posteriores, no podrá leer el número de serie hasta que el usuario le otorgue permisos de la app para acceder al dispositivo USB o accesorio.

Para obtener más información sobre cómo trabajar con dispositivos USB, consulta la guía para configurar hosts USB.

Cámara y conectividad

En esta sección, se enumeran los cambios específicos de los metadatos de la cámara y las API de conectividad.

Restricciones sobre el acceso a los metadatos y detalles de la cámara

Android 10 cambia la amplitud de la información que devuelve el método getCameraCharacteristics() de forma predeterminada. En particular, tu app debe tener el permiso CAMERA para acceder a metadatos potencialmente específicos del dispositivo que se incluyen en el valor que muestra este método.

Para obtener más información sobre estos cambios, consulta la sección sobre los campos de la cámara que requieren permiso.

Restricciones sobre la habilitación e inhabilitación de Wi-Fi

Las apps orientadas a Android 10 o versiones posteriores no pueden habilitar ni inhabilitar la conexión Wi-Fi. El método WifiManager.setWifiEnabled() siempre devuelve false.

Si necesitas solicitarles a los usuarios que habiliten o inhabiliten la conexión Wi-Fi, usa un panel de configuración.

Restricciones sobre el acceso directo a redes Wi-Fi configuradas

Para proteger la privacidad del usuario, la configuración manual de la lista de redes Wi-Fi está restringida a las apps del sistema y a los controladores de políticas de dispositivos (DPC). Un DPC determinado puede ser el propietario del dispositivo o el propietario del perfil.

Si tu app se orienta a Android 10 o versiones posteriores, y no es una app del sistema ni un DPC, los siguientes métodos no devuelven datos útiles:

Si tu app necesita conectarse a redes Wi-Fi, usa los siguientes métodos alternativos:

Algunas API de telefonía, Bluetooth y Wi-Fi requieren el permiso de ubicación precisa

Si tu app se orienta a Android 10 o versiones posteriores, debe tener el permiso ACCESS_FINE_LOCATION para usar varios métodos dentro de las APIs de Wi-Fi, Wi-Fi Aware o Bluetooth. En las siguientes secciones, se enumeran las clases y los métodos afectados.

Telefonía

Wi-Fi

Bluetooth

Permisos

En esta sección, se describen las actualizaciones al modelo de permisos de Android.

Acceso restringido a contenido de la pantalla

Para proteger el contenido de la pantalla de los usuarios, Android 10 impide el acceso silencioso a este contenido cambiando el alcance de los permisos READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT y CAPTURE_SECURE_VIDEO_OUTPUT. A partir de Android 10, estos permisos son solo de acceso con firma.

Las apps que necesitan acceder al contenido de la pantalla del dispositivo deben usar la API de MediaProjection, que muestra un mensaje en el que se solicita el consentimiento del usuario.

Apps heredadas con verificación de permiso realizada por el usuario

Si tu app se orienta a Android 5.1 (nivel de API 22) o versiones anteriores, los usuarios verán una pantalla de permisos cuando usen tu app por primera vez en un dispositivo con Android 10 o una versión posterior, como se muestra en la Figura 1. Esta pantalla les brinda a los usuarios la oportunidad de revocar el acceso a los permisos que el sistema le otorgó anteriormente a tu app durante la instalación.

Captura de pantalla del diálogo
Figura 1. Diálogo para el usuario que permite revisar los permisos heredados

Reconocimiento de actividad física

Android 10 presenta el permiso de tiempo de ejecución android.permission.ACTIVITY_RECOGNITION para las apps que necesitan detectar el recuento de pasos del usuario o clasificar su actividad física, como caminar, andar en bicicleta o moverse en un vehículo. Esto se diseñó para que los usuarios puedan ver cómo se usan los datos de los sensores del dispositivo en Configuración.

Algunas bibliotecas de los Servicios de Google Play, como la API de Activity Recognition y la API de Google Fit, no proporcionan resultados, a menos que el usuario haya otorgado este permiso a tu app.

Los únicos sensores integrados en el dispositivo que requieren que declares este permiso son los sensores de contador de pasos y detector de pasos.

Si tu app se orienta a Android 9 (nivel de API 28) o versiones anteriores, el sistema le otorga automáticamente el permiso android.permission.ACTIVITY_RECOGNITION, según sea necesario, siempre que cumpla con cada una de las siguientes condiciones:

  • El archivo de manifiesto incluye el permiso com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • El archivo de manifiesto no incluye el permiso android.permission.ACTIVITY_RECOGNITION.

Si el sistema otorga automáticamente el permiso android.permission.ACTIVITY_RECOGNITION, tu app lo conservará después de que la actualices para que se oriente a Android 10. Sin embargo, el usuario puede revocar este permiso en cualquier momento en la configuración del sistema.

Se quitaron los grupos de permisos de la IU

A partir de Android 10, las apps no pueden buscar cómo se agrupan los permisos en la IU.