На этой странице описывается принцип работы определения времени и часового пояса в Android. Здесь вы найдете информацию о том, как Android автоматически определяет время и часовые пояса, параметры настройки для производителей устройств, а также информацию для тестирования.
Обзор времени и часовых поясов
Для определения местного времени пользователя и его отображения в таких местах, как строка состояния, Android отслеживает два связанных, но независимых состояния:
- Текущее время эпохи Unix
- Текущий часовой пояс
Текущее время Unix epoch и текущий часовой пояс являются состояниями, общими для всего устройства, то есть они используются всеми пользователями устройства.
Текущее время в эпоху Unix не является фиксированным значением. Это значение автоматически обновляется с течением времени. Помимо обычного течения времени, текущее время в эпоху Unix на устройстве корректируется, если оно оказывается неверным, например, после отключения питания устройства.
Текущий часовой пояс определяет корректировку, необходимую для преобразования текущего времени Unix в местное время. Например, летом в Лос-Анджелесе устройство вычитает 7 часов из текущего времени Unix, а зимой — 8 часов.
Для поддержки этих расчетов местного времени все устройства Android имеют базу данных всех глобальных правил часовых поясов . Дополнительную информацию о правилах часовых поясов см. в разделе «Правила часовых поясов» .
Когда пользователь перемещается в новое место, где используется другой часовой пояс, текущее время Unix Epoch не требует корректировки, но обычно пользователь хочет видеть местное время, а не время в своем предыдущем местоположении. Изменение текущего часового пояса гарантирует применение правильного смещения к текущему времени Unix Epoch для отображения правильного местного времени для нового местоположения.
AOSP позволяет пользователям самостоятельно управлять автоматической установкой времени и часового пояса с помощью следующих механизмов.
- Автоматическое определение времени: гарантирует, что устройство имеет правильное текущее время в рамках эпохи Unix.
- Автоматическое определение часового пояса: гарантирует, что устройство отображает правильный текущий часовой пояс.
Автоматическое определение времени
В этом разделе представлен обзор службы time_detector , которая управляет автоматическим определением времени, пользовательскими настройками, параметрами конфигурации и подробностями тестирования.
Сервис time_detector
Служба time_detector , присутствующая на устройствах под управлением Android 10 и выше, управляет автоматическим определением времени. При включении автоматического определения времени служба корректирует текущее время Unix epoch на устройстве по мере необходимости.
Сервис time_detector всегда находится в одном из двух состояний: certain или uncertain . Состояние certain или uncertain определяется предложениями по времени , которые он получает из различных источников.
Если служба time_detector certain , то есть получила предложение с информацией о времени в формате Unix epoch, она переопределяет текущее время в формате Unix epoch, если предложенное время отличается от текущего времени в формате Unix epoch.
Когда time_detector находится uncertain , он не переопределяет текущее время. uncertain состояние обычно означает, что служба time_detector не получала предложений по времени. Служба time_detector также становится uncertain если полученные ею предложения считаются слишком старыми для использования. Возраст предложений учитывается, поскольку корректировки с использованием старых предложений времени Unix epoch зависят от прошедшего времени на устройстве, которое считается неточным в течение длительных периодов времени.
Для автоматического определения текущего времени в эпоху Unix устройство может использовать различные источники. В данном документе они называются источниками . Служба time_detector рассматривает последовательности предложений как отдельные в зависимости от их источника.
Сервис time_detector является состоятельным, что означает, что он хранит запись о последнем предложении, сделанном каждым источником. Новые предложения поступают в time_detector если у источника доступна более свежая информация о времени в формате Unix epoch. Сервис time_detector переоценивает новые и существующие предложения и обновляет состояние устройства при получении предложений.
Хотя время UTC согласовано на международном уровне, существует ряд причин, по которым определение текущего времени Unix epoch не всегда является простой задачей для устройства под управлением Android:
- Система Unix epoch time немного отличается от системы UTC time. Для преобразования между ними необходимо знать, когда наступают високосные секунды и как они обрабатываются в разных странах.
- Доступ к точкам доступа может быть возможен только в определенное время или при определенных условиях. Например, если для доступа к точке доступа требуется подключение к сети, он может быть доступен только тогда, когда устройство подключено к интернету.
- Исходные данные могут быть неточными, неточными или содержать ошибки. Например, если базовая станция сотовой связи некорректно отслеживает время UTC, источник данных может предлагать неточные значения времени.
- При получении времени в эпоху Unix могут возникать неточности. Например, задержка в сети, буферизация или планирование процессов могут привести к неточности времени в эпоху Unix.
- Опорные часы, используемые для корректировки предложения с учетом прошедшего времени с момента его получения, могут быть неточными.
В AOSP по умолчанию настроены два основных источника определения времени:
- Сеть : Использует серверы времени, работающие по протоколу NTP (Network Time Protocol).
- Телефония : Использует сигналы телефонии, основанные на идентификации сети и часовом поясе (NITZ).
Как для телефонных звонков, так и для передачи данных по сети требуется подключение к внешним сетям, которые не всегда доступны.
Начиная с Android 12, Android также поддерживает следующие источники, которые по умолчанию не настроены для использования:
- GNSS : Использует поставщика данных о местоположении GPS для получения времени из источника GNSS.
- Внешний : универсальный источник, позволяющий производителям устройств интегрировать собственный источник времени Unix-эпохи.
Настройки времени
Пользователи могут включить автоматическое определение времени в разделе «Система > Дата и время» в приложении «Настройки AOSP».

Рисунок 1. Автоматическое определение времени в настройках.
В таблице ниже описаны элементы управления пользователя для определения времени в приложении «Настройки AOSP».
*В Android 11 и более ранних версиях эта настройка называется «Использовать время, предоставляемое сетью». | |||
| Расположение настроек AOSP | Название настроек AOSP | Объем | Поведение |
|---|---|---|---|
| Система > Дата и время | Установить время автоматически* | Все пользователи | Переключатель. Включенное состояние позволяет устройству определять текущее время в формате Unix epoch. Выключенное состояние предоставляет пользователям возможность устанавливать время на устройстве вручную. |
Когда пользователь вводит время вручную, он вводит свое местное время, а не время Unix Epoch. Текущее время Unix Epoch рассчитывается с использованием текущего часового пояса для определения времени Unix Epoch.
Конфигурация
Производители устройств могут настраивать службу 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 epoch.
Отладка и тестирование по времени
В этом разделе представлена информация о том, как отлаживать и тестировать работу службы 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 может находиться в одном из двух состояний: certain и uncertain .
Когда служба time_zone_detector находится в certain состоянии, это означает, что она получила достоверную информацию о часовом поясе, которая может привести к переопределению текущего часового пояса. Когда она находится uncertain , это означает time_zone_detector что она не получила никакой информации или получила только информацию с низкой степенью достоверности, что означает, что она не будет переопределять текущий часовой пояс.
В некоторых состояниях служба 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 . Ниже приведены примеры типов подсказок:
тип =
uncertain,zoneIds = []- Алгоритм не знает, какой часовой пояс используется.
type =
certain,zoneIds = ["Europe/London"]- Алгоритм уверен, что зона — Европа/Лондон.
тип =
certain,zoneIds = []`- Алгоритм верен, но идентификатор зоны, связанный с текущим местоположением, отсутствует.
type =
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» пользователям не отображается параметр « Использовать местоположение », и устройство ведет себя так, как если бы этот параметр был включен.
- Значение параметра
location_time_zone_detection_enabledзаданного в настройках пользователя (в рамкахSettingsProvider, игнорируется. Это значение записывает предпочтения пользователя для других типов устройств.
Android 12 или Android 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 — на алгоритм определения местоположения. |
История предложений показывает, какие предложения были сделаны через Настройки (вручную), а также алгоритмами телефонии и определения местоположения.