Определение часового пояса местоположения

Функция определения часового пояса местоположения, доступная в ОС Android 12 и более поздних версиях, представляет собой дополнительную функцию автоматического определения часового пояса, которая позволяет устройствам использовать данные о своем местоположении и карте часовых поясов для определения часового пояса.

Определение часового пояса местоположения — это альтернативный механизм определения часового пояса телефонии . Поскольку эта функция не требует наличия телефонии, она может поддерживаться устройствами различных форм-факторов, помимо мобильных телефонов.

Функция определения часового пояса местоположения состоит из следующих компонентов на платформе AOSP:

  • Логика определения часового пояса на системном сервере
  • Доступная пользователю опция в настройках, представленная в Android 12, позволяющая выбирать между механизмами определения часового пояса телефонии и местоположения.

  • Система плагинов для компонентов, которые определяют местоположение и отображают часовые пояса. Плагин называется поставщиком местоположения и часовых поясов (LTZP), и на устройстве может быть до двух таких плагинов. Платформа предоставляет системные API, которые необходимо использовать для реализации LTZP.

  • Референтная реализация LTZP.

  • Инструментарий хоста для создания эталонного набора данных из данных Open Street Map (OSM) , который можно использовать с эталонной реализацией.

Конфиденциальность пользователей

Определение местоположения и часового пояса включает в себя следующие функции конфиденциальности пользователя:

  • При наличии переключателя для выбора алгоритма определения местоположения пользователи могут отключить алгоритм определения местоположения в любое время.

  • Предложения по часовому поясу, основанные на местоположении, не передаются другим пользователям устройства.

  • Пользователи могут управлять определением местоположения для определения часового пояса напрямую через экран настроек даты и времени . Пользователям не требуется явно предоставлять разрешение через диалоговое окно.

  • Информация о местоположении устройства не передаётся сервисам платформы Android. Вместо этого происходит следующее:

    • Службы определения часового пояса отправляют идентификаторы часовых поясов через LTZP, а не местоположение устройства. Это минимальный API, необходимый для поддержки определения местоположения часового пояса.
    • Системные интеграторы контролируют работу отдельных LTZP. Реализации LTZP могут использовать данные карты часовых поясов, хранящиеся полностью на устройстве Android, использовать серверы или использовать гибридный подход.

Поведение функции

Служба time_zone_detector определяет, когда следует изменить текущий часовой пояс устройства, основываясь на предложениях, которые она получает от алгоритмов обнаружения.

Служба location_time_zone_manager отвечает за генерацию рекомендаций для алгоритма определения местоположения time_zone_detector . Служба location_time_zone_manager работает в системном серверном процессе.

Служба location_time_zone_manager не содержит логики определения часового пояса. Эта служба отвечает за управление жизненным циклом одного или двух плагинов LTZP.

Если определение часового пояса местоположения не требуется, LTZP не запускаются. Это означает, что система определения часового пояса местоположения не запрашивает у LTZP отслеживание местоположения устройства, если только это не требуется явно. Некоторые из причин такого поведения:

  • В отличие от телефонных сигналов, которые принимаются пассивно в рамках обычных операций телефонии, местоположение может активно запрашиваться у поставщиков данных о местоположении Android, что может потреблять дополнительную энергию.
  • Настройки местоположения определяются пользователем, и Android должен учитывать текущие настройки пользователя.
  • Получение данных о местоположении устройства является конфиденциальным.

Кроме того, служба location_time_zone_manager делает неопределенное предложение (при необходимости), когда текущий пользователь изменяет настройки, чтобы избежать обмена информацией о местоположении между пользователями.

В результате этих выборов определение часового пояса занимает несколько секунд после переключения текущего алгоритма на определение местоположения или после переключения текущего пользователя. Это также зависит от реализации используемых LTZP.

Реализация определения часового пояса местоположения AOSP допускает до двух LTZP, основного и дополнительного LTZP, как определено здесь:

первичный ЛТЗП
Работает всегда, когда пользователь разрешил запуск функции определения часового пояса местоположения.
вторичный ЛТЗП
Запускается, если основной LTZP сообщает о неопределённости часового пояса, постоянном сбое или тайм-ауте во время инициализации. Останавливается, если основной LTZP предлагает определённое значение.

Как показано на рисунке 1, служба time_zone_detector получает предложения о часовом поясе от алгоритма телефонии или определения местоположения. Алгоритм определения местоположения получает предложения от основного или дополнительного LTZP.

Информация об обнаружении часового пояса поток

Рисунок 1. Поток информации об определении часового пояса местоположения.

Требования к конфигурации устройства

Для поддержки функции определения часового пояса местоположения на устройствах должны быть настроены LTZP, которые устройство может использовать. Для работы функции определения часового пояса местоположения и отображения её в настройках устройствам требуется включить и настроить как минимум один LTZP.

Конфигурация устройства

В этом разделе описывается, как производители устройств могут настроить устройства для поддержки определения часового пояса местоположения.

Базовая конфигурация AOSP находится в frameworks/base/core/res/res/values/config.xml :

Конфигурационный ключ Значение AOSP Описание
config_enableGeolocationTimeZoneDetection true Это основной элемент управления функцией определения часового пояса местоположения.

Эта функция поддерживается по умолчанию в AOSP. Для того чтобы эта функция была доступна пользователям, необходимо включить или настроить хотя бы один LTZP.

Установка значения false полностью отключает функцию, обеспечивая небольшую экономию памяти.
config_enablePrimaryLocationTimeZoneProvider false Это включает первичный LTZP.
config_primaryLocationTimeZoneProviderPackageName Укажите здесь имя пакета приложения, в котором находится основная служба поставщика.
config_enableSecondaryLocationTimeZoneProvider false Это включает вторичный LTZP.
config_secondaryLocationTimeZoneProviderPackageName Укажите здесь имя пакета приложения, в котором находится служба вторичного поставщика.

По умолчанию в конфигурации AOSP ключ config_enableGeolocationTimeZoneDetection установлен в true , что включает поддержку функции определения часового пояса местоположения. Изначально эта функция не видна пользователям, поскольку AOSP по умолчанию не включает конфигурацию LTZP. Однако, используя эту конфигурацию по умолчанию, производители устройств могут включать и моделировать LTZP из командной строки для тестирования. (Подробнее см. в разделе «Отладка и тестирование »).

API статуса LTZP

В Android 14 API LTZP поддерживают отчётность о состоянии LTZP. Это позволяет LTZP сообщать о проблемах, которые платформа может не обнаружить самостоятельно, поскольку компоненты определения часового пояса платформы не участвуют напрямую в определении местоположения или часового пояса в алгоритме определения местоположения.

Возможность сообщать об ухудшении работы LTZP из-за окружающей среды устройства полезна при поддержке режима отката телефонии . Например, если сторонний LTZP, использующий пользовательские настройки или разрешения для определения местоположения, работает в режиме ухудшения или отключен текущими настройками устройства, LTZP может сообщить об этом состоянии внутренним компонентам платформы, таким как приложение «Настройки», через метод reportSuggestion . Затем приложение «Настройки» может уведомлять пользователей с помощью настраиваемых строк или настроек о том, что для корректной работы алгоритма определения местоположения или его работы необходимо изменить некоторые параметры.

Дополнительную информацию о статусах, которые может сообщать LTZP, см. в TimeZoneProviderStatus .

Конфигурация и развертывание LTZP

При настройке LTZP ознакомьтесь с инструкциями в исходном коде frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java . Комментарии Javadoc содержат подробную информацию о службе, необходимых разрешениях и других настройках.

Чтобы настроить LTZP, производители устройств должны выбрать процесс приложения для размещения службы LTZP. Наличие выделенного процесса для LTZP требует больших накладных расходов; в идеале выбранный процесс приложения должен быть запущен постоянно, например, системный сервер.

На устройствах с модульными системными компонентами (модулями) следует учитывать взаимодействие между геоданными, используемыми LTZP, и правилами часовых поясов (tzdb), хранящимися в модуле данных часовых поясов ( com.android.tzdata ). Обновление одного из них без обновления другого может привести к проблемам с перекосом версий. Подробнее см. в разделе «Соображения по внедрению функций» .

Ссылка AOSP LTZP

AOSP содержит эталонную реализацию LTZP в папке packages/modules/GeoTZ . Эта эталонная реализация использует API AOSP для определения местоположения устройства и использует файл данных на устройстве для сопоставления местоположения с набором идентификаторов часовых поясов.

В исходный код включён набор справочных данных, полученный из других проектов с открытым исходным кодом. Подробнее см. файл README.md и различные файлы LICENSE.

Отладка и тестирование

В следующем разделе описываются команды оболочки для отладки и тестирования функции определения часового пояса местоположения.

Взаимодействие со службой location_time_zone_manager

Если алгоритм определения местоположения поддерживается на устройстве под управлением Android 12 и выше, Android запускает службу location_time_zone_manager во время загрузки.

Чтобы вывести текущее состояние location_time_zone_manager , используйте:

adb shell cmd location_time_zone_manager dump

Чтобы просмотреть расширенный набор параметров командной строки, облегчающих тестирование, используйте:

adb shell cmd location_time_zone_manager help

В справке также описаны свойства службы device_config , которые можно использовать для управления поведением time_zone_detector при тестировании или в рабочей среде. Подробнее см. в разделе Настройка устройства с помощью службы device_config .

Реализации LTZP могут предоставлять собственную поддержку отладки и тестирования. Например, для отладки эталонного LTZP AOSP, зарегистрированного в системном серверном процессе, можно использовать следующую команду:

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