Detección de la zona horaria de la ubicación

La detección de la zona horaria de la ubicación, disponible en Android 12 y versiones posteriores, es una función opcional de detección de la zona horaria automática que permite que los dispositivos usen sus datos de ubicación y del mapa de zona horaria para determinar la zona horaria.

La detección de la zona horaria de la ubicación es un mecanismo alternativo a la detección de la zona horaria de la telefonía. Debido a que esta función no requiere telefonía, puede ser compatible con dispositivos de varios factores de forma, además de dispositivos móviles.

La función de detección de zona horaria de la ubicación consta de los siguientes componentes en la plataforma de AOSP:

  • Lógica de detección de zona horaria en el servidor del sistema
  • Una opción accesible para el usuario en Configuración, que se introdujo en Android 12, para permitir que los usuarios elijan entre los mecanismos de detección de zona horaria de telefonía y ubicación

  • Un sistema de complementos para componentes que realizan la detección de ubicación y la asignación de zonas horarias. El complemento se denomina proveedor de zona horaria de ubicación (LTZP), y puede haber hasta dos en un dispositivo. La plataforma proporciona las APIs del sistema que se deben usar para implementar una LTZP.

  • Una implementación de LTZP de referencia.

  • Aloja herramientas para generar un conjunto de datos de referencia a partir de los datos de Open Street Map (OSM) que se pueden usar con la implementación de referencia.

Privacidad del usuario

La detección de la zona horaria de la ubicación incluye las siguientes funciones de privacidad del usuario:

  • Cuando hay un botón de activación para seleccionar el algoritmo de ubicación, los usuarios pueden desactivarlo en cualquier momento.

  • Las sugerencias de zonas horarias derivadas de la ubicación no se comparten entre los usuarios de un dispositivo.

  • Los usuarios pueden controlar la detección de la ubicación para la detección de la zona horaria de forma explícita a través de la pantalla de configuración Date and Time. Los usuarios no tienen que otorgar permiso de forma explícita a través de un diálogo de permiso.

  • La información de la ubicación del dispositivo no se pasa a los servicios de la plataforma de Android. En su lugar, sucede lo siguiente:

    • La LTZP envía los IDs de zona horaria a los servicios del detector de zona horaria, no la ubicación del dispositivo. Esta es la API mínima necesaria para admitir la detección de la zona horaria de la ubicación.
    • Los integradores de sistemas controlan el funcionamiento de LTZP individuales. Las implementaciones de LTZP pueden usar datos de mapas de zonas horarias almacenados por completo en el dispositivo Android, usar servidores o usar un enfoque híbrido.

Comportamiento de las funciones

El servicio time_zone_detector determina cuándo cambiar la zona horaria actual del dispositivo según las sugerencias que recibe de los algoritmos de detección.

El servicio location_time_zone_manager es responsable de generar sugerencias para el algoritmo de ubicación de time_zone_detector. El servicio location_time_zone_manager se ejecuta en el proceso del servidor del sistema.

El servicio location_time_zone_manager no contiene ninguna lógica de detección de zona horaria. Este servicio es responsable de administrar el ciclo de vida de uno o dos complementos de LTZP.

Cuando no se necesita la detección de la zona horaria de la ubicación, no se inician los LTZP. Esto significa que el sistema de detección de la zona horaria de la ubicación no les solicita a los LTZPs que rastreen la ubicación del dispositivo, a menos que se les solicite de forma explícita. Estos son algunos de los motivos de este comportamiento:

  • A diferencia de los indicadores de telefonía que se reciben de forma pasiva como parte de las operaciones normales de telefonía, la ubicación se puede solicitar de forma activa a los proveedores de ubicación de Android y puede consumir energía adicional.
  • La configuración de ubicación se limita al usuario, y Android debe respetar la configuración del usuario actual.
  • Obtener la ubicación del dispositivo es un tema sensible a la privacidad.

Además, el servicio location_time_zone_manager hace una sugerencia incierta (si es necesario) cuando el usuario actual cambia la configuración para evitar compartir información de ubicación entre los usuarios.

Como resultado de estas opciones, se tarda unos segundos después de cambiar el algoritmo actual a la ubicación o después de cambiar el usuario actual para que se pueda detectar la zona horaria. Esto también depende de las implementaciones de los LTZP que se usan.

La implementación de la detección de la zona horaria de la ubicación de AOSP permite hasta dos LTZP, uno principal y uno secundario, como se define a continuación:

LTZP principal
Se ejecuta en todo momento en que el usuario permite que se ejecute la función de detección de la zona horaria de la ubicación.
LTZP secundario
se ejecuta si el LTZP principal informa que la zona horaria es incierta, informa una falla permanente o se agota el tiempo de espera durante la inicialización. Se detiene si el LTZP principal envía una cierta sugerencia.

Como se muestra en la Figura 1, el servicio time_zone_detector recibe sugerencias de zona horaria del algoritmo de telefonía o ubicación. El algoritmo de ubicación recibe sugerencias del LTZP principal o secundario.

Flujo de información de la detección de la zona horaria de la ubicación

Figura 1: Flujo de información de detección de la zona horaria de la ubicación.

Requisitos de configuración del dispositivo

Para admitir la función de zona horaria de la ubicación, los dispositivos deben configurarse con LTZP que el dispositivo pueda usar. Los dispositivos requieren que se habilite y configure al menos un LTZP para que la detección de zona horaria de la ubicación sea funcional y visible para los usuarios en Configuración.

Configuración del dispositivo

En esta sección, se describe la manera en que los fabricantes de dispositivos pueden configurar dispositivos para que admitan la detección de la zona horaria de la ubicación.

La configuración base de AOSP se encuentra en frameworks/base/core/res/res/values/config.xml:

Clave de configuración Valor de AOSP Descripción
config_enableGeolocationTimeZoneDetection true Este es el control principal de la función de detección de la zona horaria de la ubicación.

La función es compatible de forma predeterminada en AOSP. Se debe habilitar o configurar al menos una LTZP para que la función esté disponible para los usuarios.

Si estableces el valor en false, se inhabilita la función por completo para ahorrar un poco de memoria.
config_enablePrimaryLocationTimeZoneProvider false Esto habilita la LTZP principal.
config_primaryLocationTimeZoneProviderPackageName Establece este valor en el nombre del paquete de la app en el que se puede encontrar el servicio del proveedor principal.
config_enableSecondaryLocationTimeZoneProvider false Esto habilita el LTZP secundario.
config_secondaryLocationTimeZoneProviderPackageName Establece este valor en el nombre del paquete de la app en la que se puede encontrar el servicio del proveedor secundario.

De forma predeterminada, la configuración de AOSP tiene la clave config_enableGeolocationTimeZoneDetection establecida en true, lo que habilita la compatibilidad con la función de detección de zona horaria de la ubicación. En un principio, la función no es visible para los usuarios porque el AOSP no incluye una configuración de LTZP de forma predeterminada. Sin embargo, con esta configuración predeterminada, los fabricantes de dispositivos pueden habilitar y simular LTZP desde la línea de comandos para realizar pruebas. (Para obtener más información, consulta Depuración y pruebas).

APIs de estado de LTZP

En Android 14, las APIs de LTZP admiten la información de estado de los informes de LTZP. Esto permite que la LTZP informe problemas que la plataforma podría no detectar por sí misma, ya que los componentes de detección de zona horaria de la plataforma no participan directamente en la detección de ubicación o zona horaria en el algoritmo de ubicación.

La capacidad de informar que el entorno del dispositivo degradó el comportamiento de la LTZP es útil cuando se admite el modo de resguardo de telefonía. Por ejemplo, si un LTZP de terceros que depende de la configuración personalizada o de los permisos para que funcione la detección de ubicación se ejecuta en un modo degradado o está inhabilitado por la configuración actual del dispositivo, el LTZP puede informar esta información de estado a los componentes internos de la plataforma, como la app de Configuración, a través del método reportSuggestion. Luego, la app de Configuración puede notificar a los usuarios a través de cadenas personalizables o personalizaciones que hay parámetros de configuración que deben cambiar para que el algoritmo de ubicación funcione bien o, incluso, funcione.

Para obtener más información sobre los estados que puede informar la LTZP, consulta TimeZoneProviderStatus.

Configuración e implementación de LTZP

Cuando configures un LTZP, lee las instrucciones en el código fuente de frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java. Los comentarios de Javadoc proporcionan detalles sobre el servicio, los permisos necesarios y otros parámetros de configuración.

Para configurar un LTZP, los fabricantes de dispositivos deben elegir un proceso de app para alojar el servicio del LTZP. Tener un proceso dedicado para un LTZP supone una sobrecarga alta. Lo ideal es que el proceso de la app elegido sea uno que se ejecute en todo momento, como el servidor del sistema.

En dispositivos con componentes de sistema modulares (módulos), considera la interacción entre los datos geoespaciales que usa la LTZP y las reglas de zona horaria (tzdb) que se llevan en el módulo de datos de zona horaria (com.android.tzdata). Es probable que las actualizaciones de uno sin actualizaciones del otro causen problemas de sesgo de versión. Para obtener más información, consulta Consideraciones sobre la adopción de funciones.

LTZP de referencia del AOSP

El AOSP contiene una implementación de LTZP de referencia en packages/modules/GeoTZ. Esta implementación de referencia usa las APIs de AOSP para determinar la ubicación del dispositivo y un archivo de datos integrado en el dispositivo para asignar la ubicación a un conjunto de IDs de zona horaria.

Se incluye un conjunto de datos de referencia derivado de otros proyectos de código abierto con el código fuente. Para obtener más detalles, consulta README.md y los diversos archivos LICENSE.

Depuración y pruebas

En la siguiente sección, se describen los comandos de shell para depurar y probar la función de detección de zona horaria de la ubicación.

Interactuar con el servicio location_time_zone_manager

Cuando el algoritmo de ubicación es compatible con un dispositivo que ejecuta Android 12 y versiones posteriores, Android crea una instancia del servicio location_time_zone_manager durante el inicio.

Para volcar el estado actual de location_time_zone_manager, usa lo siguiente:

adb shell cmd location_time_zone_manager dump

Si deseas ver un amplio conjunto de opciones de línea de comandos para ayudar con las pruebas, usa lo siguiente:

adb shell cmd location_time_zone_manager help

La salida de ayuda también describe las propiedades del servicio device_config que se pueden usar para afectar el comportamiento de time_zone_detector en pruebas o en producción. Para obtener más información, consulta Cómo configurar un dispositivo con el servicio device_config.

Las implementaciones de LTZP pueden proporcionar su propia compatibilidad de depuración o prueba. Por ejemplo, puedes usar el siguiente comando para depurar la referencia LTZP de AOSP cuando está registrada en el proceso del servidor del sistema:

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService