Detección de zona horaria de ubicación

La detección de zona horaria de ubicación, disponible en Android 12 o superior, es una función opcional de detección automática de zona horaria que permite a los dispositivos usar su ubicación y datos del mapa de zona horaria para determinar la zona horaria.

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

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

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

  • Un sistema de complemento para componentes que realizan la detección de ubicación y el mapeo de zona horaria. Un complemento se llama Proveedor de zona horaria de ubicación (LTZP) y puede haber hasta dos de ellos en un dispositivo. La plataforma proporciona API del sistema que deben usarse para implementar un LTZP.

  • Una implementación LTZP de referencia.

  • Herramientas de alojamiento para generar un conjunto de datos de referencia a partir de datos de OpenStreetMap que se pueden utilizar con la implementación de referencia.

Privacidad del usuario

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

  • Cuando hay una opción para seleccionar el algoritmo de ubicación, los usuarios pueden desactivar el algoritmo de ubicación 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 explícitamente a través de la pantalla Configuración de fecha y hora . Los usuarios no tienen que otorgar permiso explícitamente a través de un cuadro de diálogo de permiso.

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

    • Los servicios de detección de zona horaria reciben ID de zona horaria únicamente a través del LTZP, no la ubicación del dispositivo. Esta es la API mínima necesaria para admitir la detección de zona horaria de ubicación.
    • El funcionamiento de los LTZP individuales queda en manos de los integradores de sistemas. Las implementaciones de LTZP pueden utilizar datos de mapas de zonas horarias conservados íntegramente en el dispositivo Android, aprovechar servidores o utilizar un enfoque híbrido.

Comportamiento de características

El servicio time_zone_detector determina cuándo cambiar la zona horaria actual del dispositivo en función de 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. Es responsable de gestionar el ciclo de vida de uno o dos complementos llamados Proveedores de zona horaria de ubicación (LTZP).

Cuando no es necesaria la detección de zona horaria de ubicación, los LTZP no se inician. Esto significa que el sistema de detección de zona horaria de ubicación no solicita a los LTZP que rastreen la ubicación del dispositivo a menos que se les solicite explícitamente. Algunas de las razones de este comportamiento incluyen las siguientes:

  • A diferencia de las señales telefónicas que se reciben pasivamente como parte de las operaciones telefónicas normales, la ubicación se puede solicitar activamente a los proveedores de ubicación de Android y podría consumir energía adicional.
  • La configuración de ubicación está limitada al usuario y Android debe respetar la configuración del usuario actual.
  • Obtener la ubicación del dispositivo es una cuestión de privacidad.

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

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

La implementación de detección de zona horaria de ubicación AOSP permite hasta dos LTZP, un LTZP primario y uno secundario como se define aquí:

LTZP primario
Se ejecuta en todo momento cuando el usuario ha permitido que se ejecute la función de detección de zona horaria de ubicación.
LTZP secundaria
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 determinada sugerencia.

Como se muestra en la Figura 1, los servicios time_zone_detector reciben sugerencias de zona horaria del algoritmo de telefonía o ubicación. El algoritmo de ubicación recibe sugerencias del LTZP primario o secundario.

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

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

Requisitos de configuración del dispositivo

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

Configuración del dispositivo

Esta sección describe cómo los fabricantes de dispositivos pueden configurar dispositivos para admitir la detección de zona horaria de ubicación.

La configuración básica de AOSP está en frameworks/base/core/res/res/values/config.xml :

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

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

Establecer el valor en falso desactiva la función por completo para ahorrar un poco de memoria.
config_enablePrimaryLocationTimeZoneProvider false Esto habilita el LTZP primario.
config_primaryLocationTimeZoneProviderPackageName Establezca esto en el nombre del paquete de la aplicación donde se puede encontrar el servicio del proveedor principal.
config_enableSecondaryLocationTimeZoneProvider false Esto habilita el LTZP secundario.
config_secondaryLocationTimeZoneProviderPackageName Establezca esto en el nombre del paquete de la aplicación donde 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 permite la compatibilidad con la función de detección de zona horaria de ubicación. Inicialmente, la función no es visible para los usuarios porque AOSP no incluye una configuración LTZP de forma predeterminada. Sin embargo, al utilizar esta configuración predeterminada, los fabricantes de dispositivos pueden habilitar y simular LTZP desde la línea de comando para realizar pruebas. (Para obtener más información, consulte Depuración y prueba ).

API de estado LTZP

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

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

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

Ubicación Zona horaria Configuración e implementación del proveedor

Al configurar un LTZP, lea 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 otras configuraciones.

Para configurar un proveedor de zona horaria de ubicación, los fabricantes de dispositivos deben elegir un proceso de aplicación para alojar el servicio de LTZP. Tener un proceso dedicado para una LTZP supone una gran sobrecarga; Lo ideal es que el proceso de aplicación elegido sea uno que se esté ejecutando en todo momento, como el servidor del sistema.

En dispositivos con componentes de sistema modular (módulos), considere la interacción entre los datos geográficos utilizados por el LTZP y las reglas de zona horaria (tzdb) incluidas 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, consulte Consideraciones sobre la adopción de funciones .

Referencia AOSP LTZP

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

Con el código fuente se incluye un conjunto de datos de referencia derivado de otros proyectos de código abierto. Para obtener más detalles, consulte README.md y los distintos archivos de LICENCIA.

Depurar y probar

La siguiente sección describe los comandos de shell para depurar y probar la función de detección de zona horaria de ubicación.

Interactuar con el servicio location_time_zone_manager

Cuando el algoritmo de ubicación es compatible con un dispositivo con Android 12 o superior, Android crea una instancia del servicio location_time_zone_manager en el momento del arranque.

Para volcar el estado actual de location_time_zone_manager , utilice:

adb shell cmd location_time_zone_manager dump

Para ver un amplio conjunto de opciones de línea de comando para ayudar con las pruebas, use:

adb shell cmd location_time_zone_manager help

El resultado de la ayuda también describe las propiedades del servicio device_config que se pueden usar para afectar el comportamiento del time_zone_detector para pruebas o en producción. Para obtener más información, consulte Configuración de un dispositivo mediante el servicio device_config .

Las implementaciones LTZP también pueden proporcionar su propio soporte de prueba o depuración. Por ejemplo, puede utilizar 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