Cambios en la privacidad de Android 10

Android 10 (nivel de API 29) introduce varias funciones y cambios en el comportamiento a fin de proteger mejor la privacidad del usuario. Estos cambios extienden la transparencia y el control que los usuarios tienen sobre sus datos y las capacidades que otorgan a las apps. Es posible que estas funciones impliquen que los comportamientos o datos específicos de los que dependa tu app se comporten de manera diferente en comparación con versiones anteriores de la plataforma. El impacto en tu app debería minimizarse si sigues las recomendaciones 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 principales de Android 10 relacionados con la privacidad.

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

De manera 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. Estas apps pueden ver los siguientes tipos de archivos dentro de un dispositivo de almacenamiento externo sin tener que solicitar permisos al usuario relacionados con el almacenamiento:

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

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 esta se ejecuta en segundo plano. Se considera que una app accede a la ubicación en segundo plano siempre y cuando no se cumpla alguna de las siguientes condiciones:

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

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 está orientada a Android 9 (API nivel 28) o versiones anteriores, la plataforma se comportará de la siguiente manera:

  • Si tu app declara un <uses-permission> elemento para ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, el sistema agrega automáticamente un <uses-permission> elemento para ACCESS_BACKGROUND_LOCATION durante la instalación.
  • Si tu app solicita ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, el sistema automáticamente agrega 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 reciba tu app luego de la actualización dependerá de la versión del SDK de destino que posea y de sus permisos definidos, como se muestra en la siguiente tabla:

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

Versión de la plataforma de destino ¿Se otorgó el permiso básico o preciso?
¿Se definió el permiso de segundo plano 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, este puede reducir el acceso de tu app a primer plano únicamente 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 debería verificar si el usuario aún le permite recibir esta información de ubicación.

Acceso revocado cuando se actualiza el nivel de API de destino 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 revoca el ACCESS_BACKGROUND_LOCATION permiso.

Para obtener más información sobre cómo obtener la ubicación del dispositivo cuando 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 a darle más control de lo que aparece en la pantalla. Siempre que tu app inicie actividades como resultado directo de la interacción del usuario, es muy probable que tu app 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 de los eventos sujetos a horarios específicos 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 el seguimiento de la información de la afinidad de contactos. Como consecuencia, si tu app hace una búsqueda en los contactos del usuario, los resultados no están ordenados por frecuencia de interacción.

En la guía sobre ContactsProvider, se incluye un aviso que describe los campos y métodos específicos que dejarán de estar disponibles 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 manera predeterminada.

Si tu app administra un caso práctico empresarial, la plataforma proporciona las API para varias operaciones relacionadas con direcciones MAC:

  • Obtén direcciones MAC aleatorias: Las apps de propietarios y perfiles de dispositivos pueden recuperar las direcciones MAC aleatorias asignadas a una red específica mediante una llamada a getRandomizedMacAddress().
  • Obtén direcciones MAC de fábrica reales: Las apps de propietarios de dispositivos pueden recuperar la dirección MAC real del hardware del dispositivo mediante una llamada 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. Aquellas apps que necesitan acceder a este tipo de información, como las VPN, deben usar la NetworkStatsManager o ConnectivityManager clase.

Restricciones sobre identificadores de dispositivos que no se pueden restablecer

A partir de Android 10, las apps deben tener el READ_PRIVILEGED_PHONE_STATE permiso de firma para acceder a los identificadores que no se pueden restablecer del dispositivo, incluido 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 solicitas información sobre los identificadores que no se pueden restablecer, la respuesta de la plataforma variará en función de la versión del SDK de destino:

  • Si tu app se orienta a Android 10 o una versión posterior, se genera una SecurityException.
  • Si tu app se orienta a Android 9 (API nivel 28) o versiones anteriores, el método mostrará un valor null o datos del marcador de posición si la app tiene el READ_PHONE_STATE permiso. De lo contrario, se genera un 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, puedes usar un ID de publicidad de Android en esos casos prácticos específicos. Si quieres obtener más información, consulta las recomendaciones 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 se orienta a Android 10 o versiones posteriores, no podrá leer el número de serie hasta que el usuario otorgue el permiso de app al accesorio o dispositivo USB.

Para obtener más información sobre cómo trabajar con dispositivos USB, consulta la guía sobre cómo 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 modifica la cantidad de información que el getCameraCharacteristics() método muestra de forma predeterminada. Tu app debe tener el CAMERA permiso para poder acceder a los metadatos potencialmente específicos de un dispositivo incluidos en el valor de retorno del 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 que se orientan a Android 10 o versiones posteriores no pueden habilitar ni inhabilitar la red Wi-Fi. El WifiManager.setWifiEnabled() método siempre muestra false.

Si necesitas solicitar al usuario que habilite o inhabilite 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, se restringe la configuración manual de la lista de redes Wi-Fi a apps del sistema y controladores de políticas de dispositivos (DPC). Un DPC específico puede ser el propietario del dispositivo o el del perfil.

Si tu app se orienta a Android 10 o una versión posterior, y no es una app del sistema o un DPC, entonces los siguientes métodos no mostrarán datos útiles:

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

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 una versión posterior, debe tener el ACCESS_FINE_LOCATION permiso para poder usar varios métodos dentro de las API de Wi-Fi, de reconocimiento de Wi-Fi y de 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 contra el acceso silencioso, Android 10 cambia el alcance que tienen 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.

Aquellas apps que necesiten acceder al contenido de la pantalla del dispositivo deberán usar la MediaProjection API, que solicita al usuario la aprobación del acceso.

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 una versión anterior, los usuarios pueden ver una pantalla de permisos cuando usan tu app en un dispositivo que ejecuta 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 cuando se instaló.

Captura de pantalla del diálogo
Figura 1: Diálogo que le permite al usuario modificar los permisos heredados

Reconocimiento de actividad física

En Android 10, se introduce el android.permission.ACTIVITY_RECOGNITION permiso en tiempo de ejecución 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ñado para darles a los usuarios mayor 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 reconocimiento de actividad y la API de Google Fit, no proporcionan resultados, a menos que el usuario haya otorgado este permiso.

Los únicos sensores incorporados en el dispositivo que requieren que declares este permiso son el contador de pasos y el 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 a tu app, según sea necesario, si cumple con cada una de las siguientes condiciones:

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

Si el sistema otorga automáticamente el android.permission.ACTIVITY_RECOGNITION permiso, tu app conservará el permiso después de que la actualices para que se oriente a Android 10. No obstante, el usuario podrá revocarlo en cualquier momento desde la configuración del sistema.

Se quitaron los grupos de permisos de la IU

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