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

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

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

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

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

  • Система плагинов для компонентов, выполняющих определение местоположения и сопоставление часовых поясов. Плагин называется поставщиком часовых поясов местоположения (Location Time Zone Provider, 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 сообщает о неопределенности часового пояса, сообщает о постоянной ошибке или истекает время инициализации. Останавливается, если основной 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