Определение часового пояса местоположения, доступное на Android 12 и более поздних версиях, представляет собой дополнительную функцию автоматического определения часового пояса, которая позволяет устройствам использовать данные карты своего местоположения и часового пояса для определения часового пояса.
Определение часового пояса местоположения является альтернативным механизмом определения часового пояса телефонии . Поскольку для этой функции не требуется телефонная связь, она может поддерживаться не только на устройствах мобильной телефонии, но и на устройствах различных форм-факторов.
Функция определения часового пояса местоположения состоит из следующих компонентов платформы AOSP:
- Логика определения часового пояса на системном сервере
Доступная пользователю опция в настройках, представленная в Android 12, позволяющая пользователям выбирать между механизмами определения часового пояса телефонии и местоположения.
Система плагинов для компонентов, выполняющих определение местоположения и сопоставление часовых поясов. Плагин называется поставщиком часовых поясов местоположения (LTZP), и на устройстве их может быть до двух. Платформа предоставляет системные API, которые необходимо использовать для реализации LTZP.
Эталонная реализация LTZP.
Основной инструментарий для создания эталонного набора данных на основе данных Open Street Map (OSM) , который можно использовать с эталонной реализацией.
Конфиденциальность пользователя
Обнаружение часового пояса местоположения включает в себя следующие функции конфиденциальности пользователя:
Если есть переключатель для выбора алгоритма определения местоположения, пользователи могут отключить алгоритм определения местоположения в любое время.
Предложения часового пояса на основе местоположения не передаются пользователям на устройстве.
Пользователи могут напрямую управлять определением местоположения для определения часового пояса через экран «Настройки даты и времени» . Пользователям не нужно явно предоставлять разрешение через диалоговое окно разрешений.
Информация о местоположении устройства не передается в службы платформы Android. Вместо этого происходит следующее:
- Службам определения часовых поясов LTZP отправляет идентификаторы часовых поясов, а не местоположение устройства. Это минимальный API, необходимый для поддержки определения часового пояса местоположения.
- Системные интеграторы контролируют работу отдельных ЛТЗП. Реализации 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 и различные файлы ЛИЦЕНЗИИ.
Отладка и тестирование
В следующем разделе описаны команды оболочки для отладки и тестирования функции определения часового пояса местоположения.
Взаимодействие с сервисом 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