The Android Developer Challenge is back! Submit your idea before December 2.

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 cómo 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 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 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:

  • 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 un tipo de servicio en primer plano para un servicio de tu app, debes configurar la targetSdkVersion o compileSdkVersion de tu 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.

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 elemento <uses-permission> para ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, el sistema agregará automáticamente un elemento <uses-permission> en 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ó permiso de ubicación
general o específica?
¿Se definió el permiso en
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

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 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. Las apps que necesitan acceder a esta información, como las VPN, deberían 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 firma READ_PRIVILEGED_PHONE_STATE 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 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, 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 método getCameraCharacteristics() muestra de forma predeterminada. Tu app debe tener el permiso CAMERA 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 y la 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 método WifiManager.setWifiEnabled() siempre muestra el valor 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:

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 permiso ACCESS_FINE_LOCATION 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 API de MediaProjection, 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 permiso en tiempo de ejecución 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ñ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, y se especifica el permiso com.google.android.gms.permission.ACTIVITY_RECOGNITION en el archivo de manifiesto, el sistema otorga automáticamente este permiso a tu app si es necesario. Cuando actualizas tu app para que se oriente a Android 10, la plataforma conserva el permiso. 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.