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.
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 principal. |
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