Cambios en la privacidad de Android 10

Android 10 (nivel de API 29) presenta varias funciones y cambios de comportamiento para proteger mejor la privacidad de los usuarios. Estos cambios extienden la transparencia y el control que los usuarios tienen 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 puedan comportarse de manera diferente en comparación con versiones anteriores de la plataforma. El impacto en tu app debería ser mínimo si sigue las prácticas recomendadas actuales para administrar los datos del usuario.

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

Cambios principales

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

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

De forma predeterminada, a las apps que se orientan a Android 10 y versiones posteriores se les otorga acceso específico al almacenamiento externo o almacenamiento específico. Esas apps pueden ver los siguientes tipos de archivos dentro de un dispositivo de almacenamiento externo sin necesidad de solicitar permisos de usuario relacionados con el almacenamiento:

Si deseas obtener más información sobre el almacenamiento específico y 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, en Android 10, se introduce 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 a la ubicación de una app 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.

    Si quieres declarar el tipo de servicio en primer plano para un servicio de tu app, configura el targetSdkVersion o compileSdkVersion de la app en 29 o una versión posterior. Obtén más información sobre cómo los servicios en primer plano pueden continuar acciones iniciadas por el usuario que requieren acceso a la ubicación.

Si tu app crea y supervisa geovallas y está orientada 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 le 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 otorgados a tu app. El conjunto de permisos que recibe la app después de la actualización depende de la versión del SDK de destino y los permisos definidos, como se muestra en la siguiente tabla:

Tabla 1: Cambios en el estado del permiso de ubicación después de que el dispositivo se actualiza a Android 10

Versión de la plataforma de destino ¿Se otorgó el permiso
general o refinado?
¿Tienes un permiso en segundo plano
definido en el manifiesto?
Estado actualizado del permiso predeterminado
Android 10 Acceso en primer y segundo plano
Android 10 No Acceso en primer plano únicamente
Android 10 No (Ignorado por el sistema) Sin acceso
Android 9 o anterior 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 a primer plano únicamente o revocarlo por completo. Antes de intentar acceder a la ubicación del dispositivo, especialmente dentro de un servicio en primer plano, la app debe verificar si el usuario aún le permite recibir la información de ubicación.

Se revocó el acceso 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 este caso, el dispositivo revocará el permiso ACCESS_BACKGROUND_LOCATION.

Si quieres obtener más información para recuperar la ubicación del dispositivo mientras tu app está en segundo plano, consulta la guía sobre cómo 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 sobre el inicio de actividades en segundo plano. Este cambio de comportamiento ayuda a minimizar las interrupciones para el usuario y le otorga más control sobre lo que se muestra en la 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 realiza un seguimiento de la información de afinidad de los contactos. Como resultado, si tu app realiza una búsqueda en los contactos del usuario, los resultados no están ordenados por frecuencia de interacción.

La guía sobre ContactsProvider incluye una notificación que describe 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 administra un caso de uso empresarial, la plataforma proporciona APIs para varias operaciones relacionadas con direcciones MAC:

  • Obtener direcciones MAC aleatorias: Las apps de propietario de dispositivos y de propietarios de perfiles pueden recuperar la dirección MAC aleatoria asignada a una red específica llamando a getRandomizedMacAddress().
  • Obtén direcciones MAC de fábrica reales: Las apps de propietarios de dispositivos pueden recuperar la dirección MAC del hardware 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 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 de privilegio READ_PRIVILEGED_PHONE_STATE para acceder a los identificadores que no se pueden restablecer del dispositivo, que incluyen 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 tratas de 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 la app se orienta a Android 10 o versiones posteriores, se genera una SecurityException.
  • Si la app se orienta a Android 9 (nivel de API 28) o versiones anteriores, el método muestra null o datos del marcador de posición si la app tiene el permiso READ_PHONE_STATE. De lo contrario, ocurre una SecurityException.

Muchos casos prácticos no necesitan identificadores de dispositivo que no se pueden restablecer. Por ejemplo, si tu app usa identificadores de dispositivos que no se pueden restablecer para el seguimiento de anuncios o el análisis de usuarios, usa un ID de publicidad de Android en esos casos de uso específicos. Si quieres 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 esté enfocada, 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 está orientada a Android 10 o versiones posteriores, no podrá leer el número de serie hasta que el usuario le haya otorgado permiso para acceder al accesorio o dispositivo USB.

Si quieres obtener más información para 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 cantidad de información que el método getCameraCharacteristics() muestra de forma predeterminada. En particular, tu app debe tener el permiso CAMERA para acceder a los metadatos potencialmente específicos de un dispositivo incluidos en el valor que se muestra de 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 y la 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 muestra false.

Si necesitas solicitarles a los usuarios que habiliten o inhabiliten la red Wi-Fi, usa el 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 del perfil.

Si tu app está orientada a Android 10 o versiones posteriores, y no es una app del sistema ni un DPC, los siguientes métodos no mostrarán 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 poder usar varios métodos dentro de las APIs de Wi-Fi, de reconocimiento de Wi-Fi 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

Con el objetivo de proteger el contenido de la pantalla de los usuarios, Android 10 evita el acceso silencioso al contenido de la pantalla del dispositivo cambiando el alcance de los permisos READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT y CAPTURE_SECURE_VIDEO_OUTPUT. A partir de Android 10, solo se puede acceder a estos permisos mediante una 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 al usuario que dé su consentimiento.

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 en un dispositivo que ejecute Android 10 o una versión posterior por primera vez, 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 otorgó a la app en el momento de la instalación.

Captura de pantalla del diálogo
Figura 1: Diálogo para el usuario que permite la revisión de permisos heredados

Reconocimiento de actividad física

Android 10 introduce el permiso de tiempo de ejecución android.permission.ACTIVITY_RECOGNITION para apps que necesitan detectar el recuento de pasos del usuario o clasificar su actividad física, como cuando camina, anda en bicicleta o está en un vehículo. Está diseñada para brindarles a los usuarios visibilidad sobre cómo se usan los datos del sensor del dispositivo en Configuración.

Algunas bibliotecas dentro 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 le haya otorgado este permiso a la app.

Los únicos sensores integrados en el dispositivo que requieren que declares este permiso son los sensores del contador de pasos y del 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 esta 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 la función automática del sistema otorga el permiso android.permission.ACTIVITY_RECOGNITION, la app retiene el permiso después de actualizarla para que se oriente a Android 10. Sin embargo, el usuario puede revocar este permiso en cualquier momento desde la configuración del sistema.

Se quitaron los grupos de permisos de la IU

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