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

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

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

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

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

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

  • Эталонная реализация LTZP.

  • Основной инструментарий для создания набора эталонных данных из данных OpenStreetMap , который можно использовать с эталонной реализацией.

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

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

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

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

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

  • Информация о местоположении устройства не передается в службы платформы 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, который использует пользовательские настройки или разрешения для определения местоположения, работает в ухудшенном режиме или отключен текущими настройками устройства, он может передать эту информацию о состоянии внутренним компонентам платформы, таким как приложение «Настройки». через метод reportSuggestion . Затем приложение «Настройки» может уведомлять пользователей с помощью настраиваемых строк или настроек о том, что существуют настройки, которые необходимо изменить, чтобы алгоритм определения местоположения работал хорошо или вообще работал.

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

Настройка и развертывание поставщика местоположения и часового пояса

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

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

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

Справочник AOSP LTZP

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

В исходный код включен набор справочных данных, полученный из других проектов с открытым исходным кодом. Для получения более подробной информации см. README.md и различные файлы ЛИЦЕНЗИИ.

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

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

Взаимодействие с сервисом 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