На этой странице описывается, как работает определение времени и часового пояса на Android. Это включает в себя, как Android автоматически определяет время и часовые пояса, параметры конфигурации для производителей устройств и информацию о тестировании.
Обзор времени и часовых поясов
Чтобы определить местное время пользователя для отображения в таких местах, как строка состояния, Android отслеживает два связанных, но независимых состояния:
- Текущее время эпохи Unix
- Текущий часовой пояс
Текущее время эпохи Unix и текущий часовой пояс являются состояниями всего устройства, то есть они являются общими для всех пользователей устройства.
Текущее время эпохи Unix не является фиксированным значением. Оно автоматически обновляется, отражая ход времени. Помимо обычного хода времени, текущее время эпохи Unix устройства корректируется, если оно оказывается неверным, например, после отключения питания устройства.
Текущий часовой пояс определяет корректировку, которую необходимо сделать для преобразования текущего времени эпохи Unix в местное время. Например, летом в Лос-Анджелесе устройство вычитает 7 часов из текущего времени эпохи Unix, а зимой — 8 часов.
Для поддержки этих локальных расчетов времени все устройства Android имеют базу данных всех глобальных правил часовых поясов . Для получения дополнительной информации о правилах часовых поясов см. Правила часовых поясов .
Когда пользователь перемещается в новое место, использующее другой часовой пояс, текущее время эпохи Unix не нужно корректировать, но пользователь обычно хочет видеть местное время, а не время в своем предыдущем местоположении. Изменение текущего часового пояса гарантирует, что к текущему времени эпохи Unix будет применено правильное смещение для отображения правильного местного времени для нового местоположения.
AOSP позволяет пользователям самостоятельно контролировать, устанавливаются ли для них автоматически время и часовой пояс, с помощью следующих механизмов.
- Автоматическое определение времени: гарантирует, что на устройстве установлено правильное текущее время эпохи Unix.
- Автоматическое определение часового пояса: гарантирует, что на устройстве установлен правильный текущий часовой пояс.
Автоматическое определение времени
В этом разделе представлен обзор службы time_detector
, которая управляет автоматическим определением времени, пользовательскими элементами управления, параметрами конфигурации и подробностями тестирования.
Служба time_detector
Служба time_detector
, присутствующая на устройствах под управлением Android 10 или выше, управляет автоматическим определением времени. Она корректирует текущее время эпохи Unix устройства по мере необходимости, когда включено автоматическое определение времени.
Служба time_detector
всегда находится в одном из двух состояний: неопределенное или определенное . Определенное или неопределенное состояние службы определяется предложениями времени , которые она получает из различных источников.
Когда служба time_detector
уверена, то есть получила предложение с информацией о времени эпохи Unix, она переопределяет текущее время эпохи Unix, если предложение времени отличается от текущего времени эпохи Unix.
Когда time_detector
неопределен, он не переопределяет текущее время. Неопределенное состояние обычно означает, что служба time_detector
не получила предложений по времени. Служба time_detector
также становится неопределенной, если полученные ею предложения считаются слишком старыми для использования. Возраст предложений учитывается, поскольку корректировки с использованием старых предложений по времени эпохи Unix основаны на истекших часах реального времени на устройстве, которые, как предполагается, являются неточными в течение длительных периодов.
Для автоматического установления текущего времени эпохи Unix устройство может использовать различные источники. В этом документе они называются источниками . Служба time_detector
рассматривает последовательности предложений как отдельные на основе их источника.
Служба time_detector
является stateful, что означает, что она сохраняет запись последнего предложения, сделанного каждым источником. Новые предложения вносятся в time_detector
, если источник имеет более свежую информацию о времени эпохи Unix. Служба time_detector
повторно оценивает новые и существующие предложения и обновляет состояние устройства при получении предложений.
Хотя время UTC согласовано на международном уровне, существуют различные причины, по которым установить текущее время эпохи Unix для устройств Android не всегда просто:
- Время эпохи Unix — это немного отличающаяся от UTC система отсчета времени. Для преобразования между ними требуется знание того, когда возникают дополнительные секунды и как они обрабатываются источниками.
- Источники могут быть доступны только в определенное время или при определенных обстоятельствах. Например, если источник требует подключения к сети, он может быть доступен только пока устройство подключено к Интернету.
- Источники могут быть неточными или неточными, или иметь ошибки. Например, если вышка телефонной связи не отслеживает «всемирное время» правильно, источник телефонии может предоставлять неточные предложения времени.
- При получении времени эпохи Unix могут быть внесены неточности. Например, задержка сети, буферизация или планирование процесса могут привести к тому, что время эпохи Unix будет неточным.
- Эталонные часы, используемые для корректировки предложения с учетом времени, прошедшего с момента получения предложения, могут быть неточными.
В AOSP по умолчанию настроены два основных источника определения времени:
- Сеть : Использует серверы времени сетевого протокола времени (NTP).
- Телефония: использует сигналы телефонии сетевой идентификации и часового пояса (NITZ).
Как телефония, так и сетевое подключение требуют подключения к внешним сетям, которые не всегда доступны.
Начиная с Android 12, Android также поддерживает следующие источники, которые не настроены для использования по умолчанию:
- GNSS : использует поставщика местоположения GPS для получения времени из источника GNSS.
- Внешний : общее происхождение, позволяющее производителям устройств интегрировать собственный источник времени эпохи Unix.
Настройки времени
Пользователи могут включить автоматическое определение времени в разделе «Система» > «Дата и время» в приложении «Настройки AOSP».
Рисунок 1. Автоматическое определение времени в настройках.
В следующей таблице описаны пользовательские элементы управления для определения времени в приложении «Настройки AOSP».
*В Android 11 и ниже этот параметр называется «Использовать время, предоставленное сетью» . | |||
Расположение настроек AOSP | Имя настроек AOSP | Объем | Поведение |
---|---|---|---|
Система > Дата и время | Установить время автоматически* | Все пользователи | Переключатель. Когда включено , устройство отвечает за определение текущего времени эпохи Unix. Когда выключено , пользователям предоставляются элементы управления для установки времени устройства вручную. |
Когда пользователь вводит время вручную, он вводит свое местное время, а не время эпохи Unix. Текущее время эпохи Unix вычисляется с использованием текущего часового пояса для получения времени эпохи Unix.
Конфигурация
Производители устройств могут настраивать службу time_detector
различными способами, например, какие источники использовать и как расставлять приоритеты сигналам от них.
Приоритет происхождения
Начиная с Android 12 производители устройств могут изменять файл конфигурации core/res/res/values/config.xml
чтобы указать, какие источники времени следует включать в автоматическое определение времени, а также приоритет, в котором time_detector
учитывает эти источники.
Для устройств под управлением Android 11 или более ранних версий приоритет источника жестко задан как ["telephony", "network"]
, что означает, что предложения по телефонии имеют приоритет над предложениями по сети.
Конфигурация AOSP по умолчанию выглядит следующим образом:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
take precedence over lower ones.
See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
<item>network</item>
<item>telephony</item>
</string-array>
В Android 12 предложения сети и телефонии настроены как источники для использования по умолчанию. Предложения времени сети имеют приоритет над предложениями времени телефонии. Производители устройств могут изменить порядок источников, чтобы вернуться к поведению в Android 11 или ниже, где телефонии отдается более высокий приоритет.
По умолчанию, если действительное предложение с наивысшим приоритетом совпадает с текущим системным временем устройства с точностью до пары секунд, время устройства не будет изменено. Это сделано для того, чтобы избежать создания работы для установленных приложений, которые прослушивают намерение ACTION_TIME_CHANGED
.
Допустимые значения происхождения:
Разрешенные временные рамки
Android 14 вводит верхнюю границу времени для предложений времени, полученных службой time_detector
. Если устройство поддерживает 32-битные процессы, фреймворк устанавливает верхнюю границу времени, чтобы предотвратить использование устройством предложения времени, которое может вызвать проблему Y2038.
В Android 12 введена нижняя временная граница, которая используется для проверки предложений по времени, полученных службой time_detector
. Нижнее значение временной границы, используемое для автоматических предложений, устанавливается из временной метки сборки. Это работает по принципу, что допустимое время не может быть до того, как был создан образ системы устройства. Если предложение по времени находится до нижней временной границы, служба time_detector
отклоняет предложение, поскольку оно не может быть допустимым, если временная метка сборки верна.
Для устройств под управлением Android 11 или более ранних версий служба time_detector
не проверяет входящие предложения времени эпохи Unix.
Время отладки и тестирования
В этом разделе содержится информация о том, как отлаживать и тестировать поведение службы time_detector
и других компонентов, которые являются общими для всех источников.
Взаимодействие с сервисом time_detector
Чтобы просмотреть конфигурацию и состояние службы time_detector
time_detector
используйте:
adb shell cmd time_detector dump
Чтобы увидеть дополнительные команды для отладки и тестирования определения часового пояса, используйте:
adb shell cmd time_detector help
В выводе справки также описываются свойства службы device_config, которые можно использовать для влияния на поведение time_detector
для тестирования или в производстве. Подробнее см. в разделе Настройка устройства с помощью службы device_config .
Для проверки автоматического определения времени тестировщики должны знать, какие источники использует служба time_detector
. Ниже приведен пример вывода команды adb shell cmd time_detector dump
, где информация о текущем источнике и состоянии службы выделена жирным шрифтом:
$ adb shell cmd time_detector dump
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=null
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=23717241
mEnvironment.systemClockMillis()=1626707861336
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
...
Telephony suggestion history:
...
Network suggestion history:
...
Gnss suggestion history:
...
External suggestion history:
...
Эту информацию можно интерпретировать следующим образом:
Ключ | Ценить |
---|---|
mEnvironment.isAutoTimeDetectionEnabled() | Включено ли автоматическое определение времени. |
mEnvironment.autoTimeLowerBound() | Текущая нижняя граница, используемая для проверки предложений по времени. |
mEnvironment.autoOriginPriorities() | Происхождение использования и порядок приоритета. |
Журнал изменения времени отображает случаи, когда служба time_detector
изменяла текущее время эпохи Unix устройства.
Информация об истории предложений показывает, какие предложения были сделаны каждым источником.
Автоматическое определение часового пояса
В этом разделе представлен обзор службы time_zone_detector
, которая управляет автоматическим определением часового пояса, пользовательскими элементами управления в настройках, определением часового пояса телефонии и местоположения, а также подробностями тестирования.
Служба time_zone_detector
Служба time_zone_detector
, присутствующая на устройствах под управлением Android 11 или выше, управляет автоматическим определением часового пояса. Она корректирует текущий часовой пояс устройства по мере необходимости, когда включено автоматическое определение часового пояса.
Если включено автоматическое определение часового пояса, time_zone_detector
может находиться в одном из двух состояний: неопределенный и определенный .
Когда служба time_zone_detector
находится в определенном состоянии, это означает, что служба time_zone_detector
получила надежную информацию о часовом поясе, что может привести к переопределению текущего часового пояса. Когда она неопределенна, это означает, что она не получила никакой информации или получила только информацию с низкой степенью достоверности, что означает, что она не переопределит текущий часовой пояс.
Определенные состояния службы time_zone_detector
могут включать те, где time_zone_detector
не имеет информации о часовом поясе для использования или где у него есть несколько часовых поясов для выбора. Эти состояния следующие:
- Определенное состояние с нулевыми часовыми поясами вводится, когда устройство находится где-то без часового пояса, например, в международных водах или в спорной зоне. Это состояние похоже на неопределенное состояние, но указывает на то, что
time_zone_detector
не нужно предпринимать дальнейших действий, чтобы попытаться определить часовой пояс. - Определенное состояние с несколькими часовыми поясами вводится, когда есть неоднозначность или пограничные условия. В этом состоянии, если текущий часовой пояс является одним из часовых поясов, о которых
time_zone_detector
знает наверняка, текущий часовой пояс остается таким, какой он есть. В противном случае используется один из доступных часовых поясов. Это даетtime_zone_detector
элемент липкости, если пользователь вручную выбрал свой часовой пояс ранее или когда устройство приближается к границе.
Определенное или неопределенное состояние службы time_zone_detector
определяется предложениями часовых поясов , которые отправляются алгоритмом .
Обычно предложения бывают двух типов, которые близко соответствуют возможным состояниям time_zone_detector
: certain и certain . Ниже приведены примеры типов предложений:
тип =
uncertain
,zoneIds = []
- Алгоритм не знает часовой пояс.
тип =
certain
,zoneIds = ["Europe/London"]
- Алгоритм уверен, что это зона Европа/Лондон.
тип =
certain
,zoneIds = []
`- Алгоритм точный, но идентификатор зоны, связанный с текущим местоположением, отсутствует.
тип =
certain
,zoneIds = ["America/Denver", "America/Phoenix"]
- Алгоритм уверен, что ответ — одна из двух зон, но не может выбрать между «Америка/Денвер» и «Америка/Финикс».
Служба time_zone_detector
рассматривает последовательности предложений как отдельные на основе их алгоритма. В зависимости от алгоритма предложения могут также содержать метаданные, указывающие, насколько определен алгоритм.
Служба time_zone_detector
сохраняет состояние, что означает, что она сохраняет запись последнего предложения, сделанного каждым алгоритмом. Новые предложения отправляются в службу time_zone_detector
, если предыдущее предложение больше не является верным; то есть, если алгоритм теперь имеет другое предложение или если он утратил способность определять часовой пояс. Служба time_zone_detector
повторно оценивает новые и существующие предложения и обновляет состояние устройства при получении предложений.
Android поддерживает два алгоритма определения часового пояса:
- Телефония
- Расположение
Служба time_zone_detector
обычно использует один алгоритм для определения часового пояса. Если алгоритм определения местоположения поддерживается на устройстве, используемый устройством алгоритм определяется на основе настроек часового пояса, настроенных пользователем. Когда используемый алгоритм становится неопределенным относительно часового пояса, time_zone_detector
обычно не использует предложения из другого алгоритма. Предложения, связанные с алгоритмами, которые не используются, могут храниться в памяти time_zone_detector
, но они не используются, если алгоритм не изменяется. Когда пользователь изменяет настройки для автоматического определения часового пояса и алгоритм изменяется, используется самое последнее предложение, доступное для нового алгоритма.
Подробную информацию о ситуации, когда для определения часового пояса используются несколько алгоритмов, см. в разделе Резервный режим телефонии .
Резервный режим телефонии
На устройствах под управлением Android 13 и выше служба time_zone_detector
поддерживает резервный режим телефонии . Этот режим позволяет Android временно использовать предложения по обнаружению телефонии в ситуациях, когда определение местоположения не может определить часовой пояс или когда определение местоположения занимает больше времени для определения часового пояса, чем обнаружение телефонии.
Режим отката телефонии применяется к устройствам, где поддерживаются как телефония, так и определение местоположения, и где пользователь включил Использовать местоположение для установки часового пояса в настройках часового пояса . Режим включается автоматически при перезагрузке устройства и при отключении режима полета.
В Android 14 и более поздних версиях режим резервного копирования телефонии может быть активирован через API-интерфейсы отчетов о состоянии LTZP . То есть, если LTZP сообщает, что он неопределен и его способность определять местоположение или часовой пояс ухудшается из-за окружающей среды, активируется режим резервного копирования телефонии.
В режиме отката телефонии служба time_zone_detector
использует предложения телефонии, как будто определение местоположения отключено , пока алгоритм определения местоположения не сделает определенное предложение. После получения определенного предложения режим отката телефонии отключается, и используются исключительно предложения местоположения.
Подробную информацию о настройке резервного режима телефонии см. в разделе Настройка определения часового пояса .
Настройки часового пояса
Пользователи могут включить и настроить параметры автоматического определения часового пояса в приложении «Настройки AOSP».
Рисунок 2. Автоматическое определение часового пояса в настройках.
В следующей таблице описаны пользовательские элементы управления для определения часового пояса в приложении «Настройки AOSP».
*В Android 11 и более ранних версиях этот параметр называется «Использовать часовой пояс, предоставленный сетью». | |||
Расположение настроек AOSP | Имя настроек AOSP | Объем | Поведение |
---|---|---|---|
Система > Дата и время | Установить часовой пояс автоматически* | Все пользователи | Переключатель. Когда включено , устройство отвечает за определение текущего часового пояса. Когда выключено , пользователям предоставляются элементы управления для установки часового пояса устройства вручную. |
Система > Дата и время | Использовать местоположение для установки часового пояса | Текущий пользователь | Переключатель. Доступно с Android 12. Этот переключатель отображается только в том случае, если на устройстве поддерживается определение часового пояса местоположения. Изменения, представленные в Android 14, см. в разделе Устройства, поддерживающие только определение часового пояса местоположения . |
Расположение | Использовать местоположение | Текущий пользователь | Переключатель. Разрешает или запрещает использование местоположения устройства в целом. Значение актуально, если на устройстве поддерживается определение часового пояса местоположения. |
Ниже представлен обзор поведения устройства при определении часового пояса с учетом настроек, выбранных пользователем:
[Дата и время] Автоматическая установка часового пояса: ВЫКЛ.
- Пользователь должен вручную выбрать часовой пояс.
[Дата и время] Автоматическая установка часового пояса: ВКЛ.
[Местоположение] Использовать местоположение: ВЫКЛ.
- Для определения часового пояса используются телефонные сигналы.
[Местоположение] Использовать местоположение: ВКЛ.
[Дата и время] Использовать местоположение для установки часового пояса: ВКЛ.
- Местоположение используется для определения часового пояса.
[Дата и время] Использовать местоположение для установки часового пояса: ВЫКЛ.
- Для определения часового пояса используются телефонные сигналы.
Многопользовательские устройства
Поскольку некоторые из задействованных настроек относятся к текущему пользователю, поведение устройства по определению часового пояса может измениться при смене текущего пользователя на многопользовательском устройстве Android.
Переключатель Использовать местоположение для установки часового пояса распространяется на текущего пользователя и не ограничивается политикой устройства. Это означает, что пользователи всегда могут изменить его значение, даже если переключатель Автоматически устанавливать часовой пояс выключен или если другие элементы управления временем или часовым поясом ограничены контроллером политики устройства.
Устройства, поддерживающие только алгоритм определения часового пояса местоположения
В этом разделе описывается поведение устройств, которые поддерживают только алгоритм определения местоположения.
Android 14 и выше
- Параметр «Использовать местоположение» не отображается для пользователей в приложении «Настройки AOSP», и устройство ведет себя так, как будто параметр « Использовать местоположение» включен.
- Значение параметра
SettingsProvider
, определяемого пользователем,location_time_zone_detection_enabled
игнорируется. Это значение записывает предпочтения пользователя на других типах устройств.
Андроид 12 или Андроид 13
- Параметр «Использовать местоположение» виден пользователям в приложении «Настройки AOSP», и пользователи могут отключить этот параметр. Если параметр отключен, устройство не будет автоматически определять часовой пояс.
Поведение при переходе на автоматическое обнаружение и обратно
Когда пользователь переключает определение часового пояса с ручного на автоматическое , time_zone_detector
может быть уже уверен в текущем часовом поясе. Если это так, то при включении пользователем автоматического определения часовой пояс устройства может быть изменен в то же время, чтобы соответствовать мнению службы time_zone_detector
.
Аналогично, когда пользователь вносит изменения в настройки, которые приводят к изменению текущего алгоритма службы time_zone_detector
, time_zone_detector
могла уже получить предложения по новому алгоритму, и поэтому время устройства может быть немедленно изменено в соответствии с мнением службы time_zone_detector
.
Определение часового пояса телефонии
Определение часового пояса телефонии использует сигналы телефонии для определения текущего часового пояса. Для получения дополнительной информации см. Определение часового пояса телефонии .
Определение часового пояса местоположения
Определение часового пояса местоположения доступно на Android 12 и выше. Это дополнительная функция автоматического определения часового пояса, которая позволяет устройствам использовать свое местоположение для определения текущего часового пояса.
Служба location_time_zone_manager
, представленная в Android 12, работает на системном сервере и содержит код, отвечающий за отправку предложений алгоритма определения местоположения в службу time_zone_detector
. Для получения дополнительной информации см. раздел Определение часового пояса местоположения .
Соображения по внедрению функций
В этом разделе описываются аспекты функции определения часового пояса местоположения, которые помогут производителю устройства определить, следует ли внедрять эту функцию на устройстве.
Сравните телефонию и определение местоположения
В следующей таблице приведено сравнение преимуществ и недостатков использования сигналов местоположения вместо телефонных сигналов для определения часового пояса.
Обнаружение телефонии | Определение местоположения | |
---|---|---|
Корректность | Зависит от страны. Зависит от корректности и доступности MCC, NITZ. | Зависит от конфигурации функции или подключаемых компонентов. Правильность обычно зависит от:
|
Обновляемость | Обнаружение телефонии осуществляется на основе файлов, содержащихся в обновляемом модуле данных часового пояса (com.android.tzdata APEX). | Зависит от конфигурации функции или подключаемых компонентов. Возможность обновления обычно зависит от того, использует ли устройство данные карты часовых поясов сервера или клиента. Примечание: данные карты часовых поясов не содержатся в модуле данных часовых поясов, используемом для обновления копии TZDB Android и другой информации о часовых поясах. Производители устройств также должны учитывать согласованность версий между правилами часовых поясов и данными карты часовых поясов. |
Потребление энергии | Нет или низкое энергопотребление | Зависит от настроек местоположения пользователя, используемых подключаемых модулей и того, какие другие приложения запрашивают местоположение. |
Доступность | Только для телефонных устройств. Обычно требуется рабочая SIM-карта. | Определение местоположения зависит от доступных поставщиков данных о местоположении. |
Конфиденциальность пользователя
Предпочтительный часовой пояс пользователя обычно определяется его географическим положением. Местоположение — конфиденциальные данные. Пользователи могут быть обеспокоены тем, что сведения об их местоположении будут переданы в рамках определения часового пояса. Независимо от определения часового пояса все приложения, работающие на устройстве, могут считывать текущий часовой пояс устройства, не требуя разрешения Android, и приложения могут вывести неточное представление о местоположении устройства из этой информации.
В частности, определение часового пояса может осуществляться пассивными или активными способами:
- Пассивный: что-то в среде устройства сообщает устройству, какой часовой пояс следует использовать в этой среде.
- Активно: Устройство должно самостоятельно определить часовой пояс и в зависимости от настроек конфиденциальности пользователя и его согласия получает местоположение устройства, чтобы сделать это. Затем оно может поделиться своим местоположением с внешними службами. Подробности о конфиденциальности и согласии пользователя см. в обсуждении ниже.
Пассивное обнаружение, например, с помощью алгоритма телефонии, не имеет дополнительных последствий для конфиденциальности пользователей.
Активное обнаружение, например, с помощью алгоритма определения местоположения, подразумевает определение местоположения устройства, с чем пользователи могут не захотеть соглашаться, а местоположение может быть отправлено по сети для определения идентификатора часового пояса.
Подход Android к конфиденциальности пользователя для определения часового пояса дает пользователю возможность индивидуально отключать алгоритмы, которые, как ожидается, будут активны. Кроме того, код платформы AOSP не имеет прямого отношения к самому местоположению: определение местоположения и сопоставление местоположения с идентификаторами часовых поясов оставлены подключаемым компонентам, настроенным производителями устройств.
Более подробную информацию о функциях конфиденциальности пользователей см. в разделе Определение местоположения и часового пояса .
Конфигурация
Производители устройств могут настроить службу time_zone_detector
, чтобы изменить ее поведение. В этом разделе описываются параметры конфигурации для общего поведения службы time_zone_detector
. Подробности конфигурации для алгоритмов определения телефонии и часового пояса см. в разделах Определение часового пояса телефонии и Определение часового пояса местоположения .
Базовая конфигурация AOSP находится в frameworks/base/core/res/res/values/config.xml
.
Конфигурационный ключ | Значение АОСП | Описание |
---|---|---|
config_supportTelephonyTimeZoneFallback | true | Если true , time_zone_detector использует резервный режим телефонии. Это доступно для Android 13 и выше. |
Изменение поведения устройства по умолчанию
В AOSP автоматическое определение часового пояса включено по умолчанию с настройкой auto_time_zone
, установленной на true
. Чтобы отключить автоматическое определение времени по умолчанию, установите значение def_auto_time_zone
, определенное в frameworks/base/packages/SettingsProvider/res/values/defaults.xml
на false
.
При восстановлении резервной копии с другого устройства фреймворк обновляет значение параметра auto_time_zone
по умолчанию. Если вы хотите гарантировать, что этот параметр не будет восстановлен из резервной копии, включите auto_time_zone
в массив restore_blocked_global_settings
, определенный в frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml
.
Отладка и тестирование часовых поясов
В этом разделе содержится информация о том, как отлаживать и тестировать поведение службы time_zone_detector
и других компонентов, которые являются общими для всех алгоритмов.
Настройте устройство с помощью сервиса device_config
Служба device_config
— это механизм, используемый в Android для настройки изменяемого поведения с использованием значений, которые обычно извлекаются с удаленного сервера с помощью проприетарного (не AOSP) кода. При использовании значений device_config
для тестирования, особенно во время длительных ручных тестов, устройство может синхронизировать флаги, что приведет к сбросу флагов и очистке значений, установленных для тестирования.
В Android 12 и выше для временного отключения синхронизации флагов используйте:
adb shell cmd device_config set_sync_disabled_for_tests persistent
Чтобы восстановить синхронизацию флагов после тестов, используйте:
adb shell cmd device_config set_sync_disabled_for_tests none
После восстановления синхронизации флагов перезагрузите устройство.
Для получения дополнительной информации используйте $ adb shell cmd device_config help
.
Взаимодействие со службой time_zone_detector
Чтобы просмотреть конфигурацию time_zone_detector
и состояние службы time_zone_detector
, используйте:
adb shell cmd time_zone_detector dump
Чтобы увидеть дополнительные команды для отладки и тестирования определения часового пояса, используйте:
adb shell cmd time_zone_detector help
В выводе справки также описываются свойства службы device_config
, которые можно использовать для влияния на поведение службы time_zone_detector
для тестирования или в производстве. Подробнее см. в разделе Настройка устройства с помощью службы device_config .
Для проверки определения часового пояса тестировщики должны знать, какой алгоритм использует time_zone_detector
. Чтобы понять и повлиять на текущий алгоритм time_zone_detector
, используйте один из следующих вариантов:
- Проверьте визуально через пользовательский интерфейс настроек. Для получения дополнительной информации см. Настройки часового пояса .
Используйте командную строку через adb:
- Чтобы выгрузить состояние
time_zone_detector
, используйтеadb shell cmd time_zone_detector dump
- Чтобы изменить настройки устройства, используйте другие команды
time_zone_detector
. Для получения дополнительной информации используйтеadb shell cmd time_zone_detector help
.
- Чтобы выгрузить состояние
Ниже приведен пример выходных данных команды adb shell cmd time_zone_detector dump
, при этом информация о текущем алгоритме и состоянии службы выделена жирным шрифтом:
$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
mEnvironment.getCurrentUserId()=0
mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
[Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
mEnvironment.isDeviceTimeZoneInitialized()=true
mEnvironment.getDeviceTimeZone()=Europe/London
Time zone change log:
Manual suggestion history:
...
Geolocation suggestion history:
...
Telephony suggestion history:
...
Эту информацию можно интерпретировать следующим образом:
Ключ | Ценить |
---|---|
mUserConfigAllowed | Запрещает ли контроллер политики устройства пользователю управлять настройками даты и времени. |
mTelephonyDetectionSupported | Имеет ли устройство функцию определения часового пояса телефонии. |
mGeoDetectionSupported | Поддерживает ли устройство определение часового пояса местоположения. Это эффективное состояние, основанное на конфигурации и наличии по крайней мере одного LTZP. |
mAutoDetectionEnabled | Включено ли автоматическое определение часового пояса. |
mLocationEnabled | Основной переключатель местоположения. |
mGeoDetectionEnabled | Переключатель алгоритма: false указывает на алгоритм телефонии, а true указывает на алгоритм определения местоположения. |
Информация об истории предложений показывает, какие предложения были сделаны через настройки (вручную), а также с помощью алгоритмов телефонии и определения местоположения.