Определение часового пояса местоположения, доступное на Android 12 или более поздней версии, представляет собой дополнительную функцию автоматического определения часового пояса, которая позволяет устройствам использовать свое местоположение и данные карты часового пояса для определения часового пояса.
Определение часового пояса местоположения является альтернативным механизмом определения часового пояса телефонии . Поскольку для этой функции не требуется телефония, эта функция может поддерживаться на устройствах различных форм-факторов в дополнение к устройствам мобильной телефонии.
Функция определения часового пояса местоположения состоит из следующих компонентов платформы AOSP:
- Логика определения часового пояса на системном сервере.
- Доступный пользователю параметр в настройках, представленный в Android 12, позволяющий пользователям выбирать между механизмами определения часового пояса телефонии и местоположения.
- Система подключаемых модулей для компонентов, выполняющих определение местоположения и сопоставление часовых поясов. Плагин называется поставщиком часовых поясов местоположения (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
:
Ключ конфигурации | Значение АОСП | Описание |
---|---|---|
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 из командной строки для тестирования. (Дополнительную информацию см. в разделе Отладка и тестирование .)
Конфигурация и развертывание поставщика часовых поясов местоположения
При настройке LTZP прочитайте инструкции в исходном коде для frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java
. Комментарии Javadoc предоставляют подробную информацию о сервисе, необходимых разрешениях и другой конфигурации.
Чтобы настроить поставщика часовых поясов местоположения, производители устройств должны выбрать процесс приложения для размещения службы LTZP. Наличие выделенного процесса для LTZP требует больших накладных расходов; в идеале выбранный процесс приложения — это процесс, который работает постоянно, например, системный сервер.
На устройствах с компонентами модульной системы (модулями) рассмотрите взаимодействие между географическими данными, используемыми LTZP, и правилами часового пояса (tzdb), хранящимися в модуле данных часового пояса ( com.android.tzdata
). Обновления одного без обновлений другого могут вызвать проблемы с перекосом версии. Дополнительные сведения см. в разделе Рекомендации по внедрению функций .
Справочник AOSP Местоположение Провайдер часового пояса
AOSP содержит справочную реализацию поставщика часовых поясов местоположения в 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