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

Определение часового пояса местоположения, доступное в 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 отправляет определенное предложение.

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

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

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

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

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

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

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

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

Конфигурационный ключ Значение АОСП Описание
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 могут предоставлять собственную поддержку отладки или тестирования. Например, вы можете использовать следующую команду для отладки ссылки AOSP LTZP, когда она зарегистрирована в процессе системного сервера:

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