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 automática de la zona horaria que permite que los dispositivos usen sus datos de ubicación y de 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 telefonía. Como esta función no requiere telefonía, se puede admitir en dispositivos con varios factores de forma, además de los dispositivos de telefonía móvil.

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

  • Lógica de detección de la zona horaria en el servidor del sistema
  • Opción accesible para el usuario en Configuración, introducida en Android 12, para permitir que los usuarios seleccionen entre los mecanismos de detección de zona horaria de telefonía y de ubicación

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

  • Es una implementación de referencia de la LTZP.

  • Herramientas de host para generar un conjunto de datos de referencia a partir de 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 zona horaria derivadas de la ubicación no se comparten entre los usuarios de un dispositivo.

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

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

    • El 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 las LTZP individuales. Las implementaciones de LTZP pueden usar datos de mapas de zonas horarias que se almacenan 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 LTZP que hagan un seguimiento de la ubicación del dispositivo, a menos que sea necesario 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 proceso sensible en términos de 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 usuarios.

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

La implementación de la detección de zona horaria según la ubicación del AOSP permite hasta dos LTZP, uno principal y uno secundario, como se define aquí:

LTZP principal
Se ejecuta en todo momento cuando el usuario permite que se ejecute la función de detección de zona horaria de ubicación.
LTZP secundaria
Se ejecuta si la 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 la LTZP principal envía una sugerencia determinada.

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

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

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

Requisitos de configuración del dispositivo

Para admitir la función de zona horaria según la ubicación, los dispositivos deben configurarse con LTZP que el dispositivo pueda usar. Los dispositivos requieren que al menos una LTZP esté habilitada y configurada para que la detección de la zona horaria de la ubicación funcione y sea visible para los usuarios en Configuración.

Configuración del dispositivo

En esta sección, se describe cómo los fabricantes de dispositivos pueden configurarlos 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 del 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 configuras 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 la que se puede encontrar el servicio del proveedor principal.
config_enableSecondaryLocationTimeZoneProvider false Esto habilita la LTZP secundaria.
config_secondaryLocationTimeZoneProviderPackageName Establece este parámetro 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 del AOSP tiene la clave config_enableGeolocationTimeZoneDetection establecida en true, lo que habilita la compatibilidad con la función de detección de la zona horaria de la ubicación. Inicialmente, los usuarios no pueden ver la función porque 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 informes de LTZP. Esto permite que la LTZP informe problemas que la plataforma tal vez no pueda 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 comportamiento de la LTZP se degradó debido al entorno del dispositivo es útil cuando se admite el modo de resguardo de telefonía. Por ejemplo, si una LTZP externa que depende de la configuración o los permisos personalizados para que funcione su detección de ubicación se ejecuta en un modo degradado o está inhabilitada por la configuración actual del dispositivo, la 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 o personalizaciones personalizables que hay parámetros de configuración que deben cambiar para que el algoritmo de ubicación funcione bien o no funcione en absoluto.

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 una 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 una LTZP, los fabricantes de dispositivos deben elegir un proceso de la app para alojar el servicio de la LTZP. Tener un proceso dedicado para una LTZP implica 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 los dispositivos con componentes modulares del sistema (módulos), considera la interacción entre los datos geográficos que usa la LTZP y las reglas de zona horaria (tzdb) que se incluyen en el módulo de datos de zona horaria (com.android.tzdata). Es probable que las actualizaciones de uno sin las actualizaciones del otro causen problemas de sesgo de versión. Para obtener más información, consulta Consideraciones para la adopción de funciones.

LTZP de referencia del AOSP

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

El código fuente incluye un conjunto de datos de referencia derivado de otros proyectos de código abierto. Para obtener más detalles, consulta README.md y los distintos 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 la zona horaria de la ubicación.

Interactúa 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 instancia el servicio location_time_zone_manager en el momento del inicio.

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

adb shell cmd location_time_zone_manager dump

Para ver un conjunto extenso de opciones de línea de comandos que te ayudarán con las pruebas, usa el siguiente comando:

adb shell cmd location_time_zone_manager help

El resultado de ayuda también describe las propiedades del servicio device_config que se pueden usar para afectar el comportamiento de device_config en pruebas o en producción.time_zone_detector 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 asistencia para la depuración o las pruebas. Por ejemplo, puedes usar el siguiente comando para depurar el LTZP de referencia de AOSP cuando se registra en el proceso del servidor del sistema:

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