Обзор времени

На этой странице описывается, как работает определение времени и часового пояса на устройствах 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 всегда находится в одном из двух состояний: certain или uncertain . Состояние (определённое или неопределённое) службы определяется предложениями времени , которые она получает из различных источников.

Когда служба time_detector уверена, то есть получила предложение с информацией о времени эпохи Unix, она переопределяет текущее время эпохи Unix, если предложение времени отличается от текущего времени эпохи Unix.

Если time_detector неопределён, он не переопределяет текущее время. Состояние неопределённости обычно означает, что служба time_detector не получила предложения по времени. Служба time_detector также становится неопределённой, если полученные предложения считаются слишком старыми для использования. Возраст предложений учитывается, поскольку корректировки с использованием старых предложений эпохи Unix основаны на прошедшем времени реального времени на устройстве, которое считается неточным в течение длительного времени.

Для автоматического определения текущего времени эпохи Unix устройство может использовать различные источники. В данном документе они называются источниками . Служба time_detector различает последовательности предложений в зависимости от их источника.

Служба time_detector сохраняет состояние, то есть сохраняет записи о последних предложениях, сделанных каждым источником. Новые предложения передаются в time_detector , если источник располагает более актуальной информацией о времени эпохи Unix. Служба time_detector переоценивает новые и существующие предложения и обновляет состояние устройства при их получении.

Несмотря на то, что время UTC согласовано на международном уровне, существует ряд причин, по которым установка текущего времени эпохи Unix не всегда проста для устройств на базе Android:

  • Время эпохи Unix — это система отсчёта времени, которая несколько отличается от времени UTC. Для перевода между ними требуется знание того, когда вводятся дополнительные секунды и как они обрабатываются источниками времени.
  • Источники могут быть доступны только в определённое время или при определённых обстоятельствах. Например, если источник требует подключения к сети, он может быть доступен только при подключении устройства к интернету.
  • Источники могут быть неточными, неточными или содержать ошибки. Например, если вышка сотовой связи неправильно отслеживает время 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 , доступная на устройствах под управлением Android 11 и более поздних версий, управляет автоматическим определением часового пояса. Она корректирует текущий часовой пояс устройства по мере необходимости, если включено автоматическое определение часового пояса.

Когда включено автоматическое определение часового пояса, time_zone_detector может находиться в одном из двух состояний: certain и uncertain .

Когда служба 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 и uncertain . Ниже приведены примеры типов предложений:

  • тип = uncertain , zoneIds = []

    • Алгоритм не знает часовой пояс.
  • тип = 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», и устройство ведет себя так, как будто параметр « Использовать местоположение» включен.
    • Значение SettingsProvider location_time_zone_detection_enabled действующее на уровне пользователя, игнорируется. Это значение учитывает предпочтения пользователя на других типах устройств.
  • 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 указывает на алгоритм определения местоположения.

Информация об истории предложений показывает, какие предложения были сделаны через настройки (вручную), а также с помощью алгоритмов телефонии и определения местоположения.