На этой странице рассказывается, как на устройствах Android определяется время и часовой пояс. В нем рассказывается, как Android автоматически определяет время и часовые пояса, какие варианты конфигурации доступны производителям устройств и как проводить тестирование.
Общие сведения о времени и часовых поясах
Чтобы определить местное время пользователя для отображения в таких местах, как строка состояния, Android отслеживает два связанных, но независимых состояния:
- Текущее время в формате Unix.
- текущий часовой пояс;
Текущее время эпохи Unix и текущий часовой пояс – это параметры, действующие на уровне устройства, то есть общие для всех пользователей устройства.
Текущее время эпохи Unix не является фиксированным значением. Это значение автоматически обновляется с течением времени. Помимо обычного течения времени, текущее время эпохи Unix на устройстве корректируется, если оно оказывается неправильным, например после отключения питания.
Текущий часовой пояс определяет, как нужно скорректировать текущее время эпохи Unix, чтобы получить местное время. Например, летом в Лос-Анджелесе устройство вычитает из текущего времени эпохи Unix 7 часов, а зимой – 8 часов.
Чтобы поддерживать расчет местного времени, на всех устройствах Android есть база данных со всеми правилами часовых поясов. Подробнее о правилах часовых поясов…
Когда пользователь переезжает в другой часовой пояс, текущее время эпохи Unix не нужно корректировать, но обычно пользователь хочет видеть местное время, а не время в предыдущем местоположении. При смене текущего часового пояса к текущему времени эпохи Unix применяется правильное смещение, чтобы отображать правильное местное время для нового местоположения.
AOSP позволяет пользователям самостоятельно управлять автоматической настройкой времени и часового пояса с помощью следующих механизмов.
- Автоматическое определение времени. Устройство получает правильное текущее время эпохи Unix.
- Автоматическое определение часового пояса. Позволяет убедиться, что на устройстве установлен правильный часовой пояс.
Автоматическое определение времени
В этом разделе представлен обзор сервиса time_detector, который управляет автоматическим определением времени, пользовательскими элементами управления, параметрами конфигурации и деталями тестирования.
Сервис time_detector
Сервис time_detector, доступный на устройствах с Android 10 и более поздних версий, управляет автоматическим определением времени. Если автоматическое определение времени включено, сервис при необходимости корректирует текущее время эпохи Unix на устройстве.
Сервис time_detector всегда находится в одном из двух состояний: certain или uncertain. Статус certain или uncertain определяется на основе предложений времени, которые сервис получает из разных источников.
Когда сервис time_detector находится в состоянии certain, то есть получил предложение с информацией о времени в формате Unix, он перезаписывает текущее время в формате Unix, если предложенное время отличается от текущего.
Когда time_detector uncertain, текущее время не меняется. Статус uncertain обычно означает, что сервис time_detector не получил предложения по времени. Сервис time_detector также переходит в состояние uncertain, если полученные им подсказки считаются слишком старыми для использования. Возраст предложений учитывается, поскольку корректировки с использованием старых предложений времени эпохи Unix опираются на часы реального времени, которые, как предполагается, неточны в течение длительных периодов.
Чтобы автоматически установить текущее время эпохи Unix, устройство может использовать различные источники. В этом документе они называются источниками. Сервис time_detector обрабатывает последовательности подсказок как отдельные на основе их происхождения.
Сервис time_detector с отслеживанием состояния, что означает, что он хранит запись о последнем предложении, сделанном каждым источником. Новые предложения отправляются в time_detector, если у источника есть более свежая информация о времени эпохи Unix. Сервис time_detector пересматривает новые и существующие предложения и обновляет состояние устройства, когда получает предложения.
Хотя UTC – это международный стандарт, есть несколько причин, по которым устройству Android не всегда просто определить текущее время эпохи Unix:
- Время эпохи Unix немного отличается от времени UTC. Чтобы преобразовать одно значение в другое, нужно знать, когда происходят дополнительные секунды и как они обрабатываются источниками.
- Источники могут быть доступны только в определенное время или при определенных обстоятельствах. Например, если для источника требуется подключение к сети, он может быть доступен только при подключении устройства к интернету.
- Источники могут быть неточными или содержать ошибки. Например, если вышка сотовой связи не отслеживает время UTC правильно, источник телефонии может предоставлять неточные предложения времени.
- При получении времени эпохи Unix могут возникать неточности. Например, задержка в сети, буферизация или планирование процессов могут привести к неточности времени эпохи Unix.
- Опорные часы, используемые для корректировки предложения с учетом времени, прошедшего с момента его получения, могут быть неточными.
В AOSP по умолчанию настроены два основных источника определения времени:
- Сеть. Использует серверы времени протокола NTP.
- Телефония. Используются сигналы телефонии NITZ (Network Identity and Time Zone).
Для работы телефонии и сети требуется подключение к внешним сетям, которые не всегда доступны.
Начиная с Android 12, Android также поддерживает следующие источники, которые по умолчанию не настроены для использования:
- GNSS: использует поставщика данных о местоположении GPS, чтобы получить время от источника GNSS.
- Внешний – общий источник, который позволяет производителям устройств интегрировать собственный источник времени эпохи Unix.
Настройки времени
Пользователи могут включить автоматическое определение времени в приложении "Настройки AOSP" в разделе Система > Дата и время.
Рисунок 1. Автоматическое определение времени в настройках.
В таблице ниже описаны пользовательские настройки для определения времени в приложении "Настройки" в AOSP.
|
*В Android 11 и более ранних версиях эта настройка называется Использовать время, предоставленное сетью. |
|||
| Местоположение настроек AOSP | Название настроек AOSP | Область действия | Поведение |
|---|---|---|---|
| Система > Дата и время | Установить время автоматически* | Все пользователи | Переключатель. Если параметр включен, устройство отвечает за определение текущего времени эпохи 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-битные процессы, фреймворк устанавливает верхнюю границу времени, чтобы предотвратить использование устройством предложения времени, которое может вызвать проблему 2038 года.
В 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
На устройствах с Android 11 и более новыми версиями ОС автоматическое определение часового пояса управляется сервисом time_zone_detector. Если включено автоматическое определение часового пояса, сервис корректирует текущий часовой пояс устройства по мере необходимости.
Если автоматическое определение часового пояса включено, значок time_zone_detector может иметь два состояния: certain и uncertain.
Когда сервис time_zone_detector находится в состоянии certain, это означает, что
time_zone_detectorон получил точную информацию о часовом поясе, которая
может привести к переопределению текущего часового пояса. Если значение равно uncertain, это означает, что информация не получена или получена с низкой достоверностью, поэтому текущий часовой пояс не будет изменен.
Некоторые состояния сервиса time_zone_detector могут включать ситуации, когда у time_zone_detector нет информации о часовом поясе или есть несколько часовых поясов на выбор. Ниже перечислены возможные состояния.
- Состояние
certainс нулевым количеством часовых поясов возникает, когда устройство находится в месте, где нет часового пояса, например в международных водах или спорной зоне. Этот статус похож на неопределенный, но указывает, чтоtime_zone_detectorне нужно предпринимать дальнейшие действия, чтобы определить часовой пояс. - В штате
certainнесколько часовых поясов, поэтому при наличии неопределенности или пограничных условий указывается несколько часовых поясов. Если текущий часовой пояс входит в число тех, которыеtime_zone_detectorопределяет с высокой точностью, он не меняется. В противном случае используется один из доступных часовых поясов. Это позволяетtime_zone_detectorсохранять часовой пояс, если пользователь ранее выбрал его вручную или если устройство приближается к границе часового пояса.
Статус certain или uncertain сервиса time_zone_detector определяется предложениями часовых поясов, которые отправляет алгоритм.
Как правило, подсказки бывают двух типов, которые соответствуют возможным состояниям time_zone_detector: certain и uncertain. Ниже приведены примеры типов подсказок:
type =
uncertain,zoneIds = []- Алгоритм не знает, какой часовой пояс используется.
type =
certain,zoneIds = ["Europe/London"]- Алгоритм уверен, что часовой пояс – Europe/London.
type =
certain,zoneIds = []`- Алгоритм уверен, но с текущим местоположением не связан идентификатор зоны.
type =
certain,zoneIds = ["America/Denver", "America/Phoenix"]- Алгоритм уверен, что ответ – один из двух часовых поясов, но не может выбрать между 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игнорируется. Это значение регистрирует предпочтения пользователя на других типах устройств.
Android 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.
| Ключ конфигурации | Значение AOSP | Описание |
|---|---|---|
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 – алгоритм определения местоположения. |
В истории предложений указано, какие предложения были сделаны в настройках (вручную), а также алгоритмами телефонии и геолокации.