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

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

Обзор времени и часовых поясов

Чтобы определить местное время пользователя для отображения в таких местах, как строка состояния, Android отслеживает два связанных, но независимых состояния:

  • Текущее время эпохи Unix
  • Текущий часовой пояс

Текущее время эпохи Unix и текущий часовой пояс являются состояниями всего устройства, то есть они доступны всем пользователям устройства.

Текущее время эпохи Unix не является фиксированным значением. Он обновляется автоматически, чтобы отражать течение времени. Помимо обычного течения времени, текущее время эпохи Unix устройства корректируется, если оно оказывается неправильным, например, после отключения питания устройства.

Текущий часовой пояс определяет корректировку, которую необходимо внести для преобразования текущего времени эпохи Unix в местное время. Например, летом в Лос-Анджелесе устройство вычитает 7 часов из текущего времени эпохи Unix, а зимой — 8 часов.

Для поддержки расчетов местного времени на всех устройствах Android имеется база данных всех глобальных правил часовых поясов . Дополнительную информацию о правилах часовых поясов см. в разделе Правила часовых поясов .

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

AOSP позволяет пользователям самостоятельно контролировать, устанавливаются ли для них время и часовой пояс автоматически с помощью следующих механизмов.

  • Автоматическое определение времени: гарантирует, что на устройстве установлено правильное текущее время эпохи Unix.
  • Автоматическое определение часового пояса: гарантирует, что на устройстве установлен правильный текущий часовой пояс.

Автоматическое определение времени

В этом разделе представлен обзор службы time_detector , которая управляет автоматическим определением времени, пользовательскими элементами управления, параметрами конфигурации и деталями тестирования.

Сервис time_detector

Служба time_detector , присутствующая на устройствах под управлением Android 10 или более поздней версии, управляет автоматическим определением времени. Он корректирует текущее время эпохи Unix устройства по мере необходимости, когда включено автоматическое определение времени.

Сервис time_detector всегда находится в одном из двух состояний: неопределенное или определенное . Определенное или неопределенное состояние службы определяется предложениями времени , которые она получает из различных источников.

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

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

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

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

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

  • Время эпохи Unix немного отличается от времени UTC. Преобразование между ними требует знания того, когда возникают високосные секунды и как они обрабатываются источниками.
  • Origins может быть доступен только в определенное время или при определенных обстоятельствах. Например, если источнику требуется подключение к сети, оно может быть доступно только тогда, когда устройство подключено к Интернету.
  • Источники могут быть неточными, неточными или содержать ошибки. Например, если вышка сотовой телефонной связи неправильно отслеживает «универсальное время», источник телефонной связи может предоставлять неточные рекомендации по времени.
  • При получении времени эпохи Unix могут возникнуть неточности. Например, сетевая задержка, буферизация или планирование процессов могут привести к неточному времени эпохи Unix.
  • Эталонные часы, используемые для корректировки предложения с учетом времени, прошедшего с момента получения предложения, могут быть неточными.

Существует два основных источника определения времени, настроенных для использования по умолчанию в AOSP:

  • Сеть : используются серверы времени Network Time Protocol (NTP).
  • Телефония: использует телефонные сигналы идентификации сети и часового пояса (NITZ).

И телефония, и сетевые источники требуют подключения к внешним сетям, которые не всегда доступны.

Начиная с Android 12, Android также поддерживает следующие источники происхождения, которые по умолчанию не настроены для использования:

  • GNSS : использует поставщика местоположения GPS для получения времени из источника GNSS.
  • Внешний : общий источник, который позволяет производителям устройств интегрировать собственный источник времени эпохи Unix.

Настройки времени

Пользователи могут включить автоматическое определение времени в разделе «Система» > «Дата и время» в приложении «Настройки AOSP».

Автоматическое определение времени в настройках

Рисунок 1. Автоматическое определение времени в настройках.

В следующей таблице описаны пользовательские элементы управления определением времени в приложении «Настройки AOSP».

*В Android 11 и более ранних версиях этот параметр помечен как «Использовать время, предоставленное сетью».

Расположение настроек AOSP Имя настроек AOSP Объем Поведение
Система > Дата и время Установите время автоматически* Все пользователи

Переключатель.

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

Когда пользователь вводит время вручную, он вводит свое местное время, а не время эпохи Unix. Текущее время эпохи Unix рассчитывается с использованием текущего часового пояса для получения времени эпохи Unix.

Конфигурация

Производители устройств могут настраивать службу time_detector различными способами, например, какие источники использовать и как расставлять приоритеты сигналов от них.

Приоритизация происхождения

Начиная с Android 12, производители устройств могут изменить файл конфигурации core/res/res/values/config.xml чтобы указать, какие источники времени следует включать в автоматическое определение времени, а также приоритет, с которым time_detector рассматривает эти источники.

Для устройств под управлением Android 11 или более ранней версии приоритет источника жестко запрограммирован как ["telephony", "network"] , что означает, что предложения по телефону имеют приоритет над предложениями по сети.

Конфигурация AOSP по умолчанию следующая:

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
     take precedence over lower ones.
     See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
    <item>network</item>
    <item>telephony</item>
</string-array>

В Android 12 предложения сети и телефонии настроены как источники для использования по умолчанию. Предложения по времени в сети имеют приоритет над предложениями по времени для телефонии. Производители устройств могут изменить порядок происхождения, чтобы вернуться к поведению Android 11 или более ранней версии, где телефонии уделяется более высокий приоритет.

По умолчанию, если действительное предложение с наивысшим приоритетом соответствует текущему системному времени устройства с точностью до нескольких секунд, время устройства не будет изменено. Это сделано для того, чтобы избежать создания работы для установленных приложений, которые слушают намерение ACTION_TIME_CHANGED .

Допустимые значения происхождения:

Разрешенные сроки

В Android 14 введена верхняя граница времени для предложений по времени, полученных службой time_detector . Если устройство поддерживает 32-разрядные процессы, платформа устанавливает верхнюю границу времени, чтобы устройство не использовало предложение времени, которое может вызвать проблему Y2038.

В Android 12 введена более низкая граница времени, которая используется для проверки предложений по времени, полученных службой time_detector . Нижнее значение временной привязки, используемое для автоматических предложений, устанавливается на основе временной метки сборки. Это работает по принципу, что допустимое время не может быть до создания образа системы устройства. Если предложенное время превышает нижнюю границу времени, служба time_detector отклоняет это предложение, поскольку оно не может быть действительным, если временная метка сборки правильная.

Для устройств под управлением Android 11 или более ранней версии служба time_detector не проверяет входящие предложения времени эпохи Unix.

Время отладки и тестирования

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

Взаимодействие с сервисом time_detector

Чтобы просмотреть конфигурацию службы time_detector и состояние службы time_detector , используйте:

adb shell cmd time_detector dump

Чтобы увидеть дополнительные команды для отладки и тестирования определения часового пояса, используйте:

adb shell cmd time_detector help

В выводе справки также описаны свойства службы device_config, которые можно использовать для воздействия на поведение time_detector при тестировании или в рабочей среде. Подробности см. в разделе Настройка устройства с помощью сервиса device_config .

Чтобы проверить автоматическое определение времени, тестировщики должны знать, какие источники использует служба time_detector . Ниже приведен пример вывода команды adb shell cmd time_detector dump , где информация о текущем источнике и состоянии службы выделена жирным шрифтом:

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

Информацию можно интерпретировать следующим образом:

Ключ Ценить
mEnvironment.isAutoTimeDetectionEnabled() Включено ли автоматическое определение времени.
mEnvironment.autoTimeLowerBound() Текущая нижняя граница используется для проверки предложений по времени.
mEnvironment.autoOriginPriorities() Истоки использования и порядок приоритета.

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

Информация об истории предложений показывает, какие предложения были сделаны каждым источником.

Автоматическое определение часового пояса

В этом разделе представлен обзор службы time_zone_detector , которая управляет автоматическим определением часового пояса, пользовательскими элементами управления в настройках, определением часового пояса телефонии и местоположения, а также сведениями о тестировании.

Сервис time_zone_detector

Служба time_zone_detector , присутствующая на устройствах под управлением Android 11 или более поздней версии, управляет автоматическим определением часового пояса. Он настраивает текущий часовой пояс устройства по мере необходимости, когда включено автоматическое определение часового пояса.

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

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

Определенные состояния службы time_zone_detector могут включать состояния, в которых time_zone_detector не имеет информации о часовом поясе для использования или когда у него есть несколько часовых поясов для выбора. Эти состояния следующие:

  • Определенное состояние с нулевым часовым поясом вводится, когда устройство находится где-то без часового пояса, например, в международных водах или на спорной территории. Это состояние похоже на неопределенное состояние, но указывает на то, что time_zone_detector не нужно предпринимать дальнейшие действия, чтобы попытаться определить часовой пояс.
  • Вводится определенный штат с несколькими часовыми поясами, где есть двусмысленность или пограничные условия. В этом состоянии, если текущий часовой пояс является одним из часовых поясов, в которых точно уверен time_zone_detector , текущий часовой пояс остается как есть. В противном случае используется один из доступных часовых поясов. Это придает time_zone_detector элемент закрепления, если пользователь ранее вручную выбрал свой часовой пояс или когда устройство приближается к границе.

Определенное или неопределенное состояние службы time_zone_detector определяется предложениями часового пояса , которые отправляются алгоритмом .

Обычно предложения бывают двух типов, которые точно соответствуют возможным состояниям time_zone_detector : определенные и неопределенные . Ниже приведены примеры типов предложений:

  • тип = 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. Этот переключатель отображается только в том случае, если на устройстве поддерживается определение часового пояса местоположения.

Изменения, внесенные в версию 14, см. в разделе «Устройства, поддерживающие только определение часового пояса» .

Расположение Использовать местоположение Текущий пользователь

Переключатель.

Разрешает или запрещает использование данных о местоположении устройства в целом. Значение актуально, если на устройстве поддерживается определение часового пояса местоположения.

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

  • [Дата и время] Автоматическая установка часового пояса: ВЫКЛ.

    • Пользователь должен вручную выбрать часовой пояс.
  • [Дата и время] Автоматическая установка часового пояса: ВКЛ.

    • [Местоположение] Использовать местоположение: ВЫКЛ.

      • Телефонные сигналы используются для определения часового пояса.
    • [Местоположение] Использовать местоположение: ВКЛ.

      • [Дата и время] Использовать местоположение для установки часового пояса: ВКЛ.

        • Местоположение используется для определения часового пояса.
      • [Дата и время] Использовать местоположение для установки часового пояса: ВЫКЛ.

        • Телефонные сигналы используются для определения часового пояса.

Несколько пользовательских устройств

Поскольку некоторые из задействованных настроек относятся к текущему пользователю, поведение устройства при определении часового пояса может измениться при смене текущего пользователя на многопользовательском устройстве Android.

Область использования переключателя «Использовать местоположение для установки часового пояса » ограничена текущим пользователем и не ограничена политикой устройства. Это означает, что пользователи всегда могут изменить его значение, даже если переключатель «Установить часовой пояс автоматически » отключен или если другие элементы управления временем или часовым поясом ограничены контроллером политики устройств.

Устройства, поддерживающие только алгоритм определения часового пояса местоположения

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

  • Андроид 14 и выше

    • Параметр «Использовать местоположение» не отображается пользователям в приложении «Настройки AOSP», и устройство ведет себя так, как если бы параметр « Использовать местоположение» был включен.
    • Значение пользовательского параметра SettingsProvider location_time_zone_detection_enabled игнорируется. Это значение записывает предпочтения пользователя на других типах устройств.
  • Андроид 12 или Андроид 13

    • Параметр «Использовать местоположение» виден пользователям в приложении «Настройки AOSP», и пользователи могут отключить эту опцию. Если эта опция отключена, устройство не определит часовой пояс автоматически.

Поведение при переключении на автоматическое обнаружение и обратно

Когда пользователь переключает определение часового пояса с ручного на автоматическое , time_zone_detector может уже быть уверен в текущем часовом поясе. В этом случае, поскольку пользователь включает автоматическое обнаружение, часовой пояс устройства может быть изменен одновременно в соответствии с мнением службы time_zone_detector .

Аналогичным образом, когда пользователь вносит изменения в настройки, которые приводят к изменению текущего алгоритма службы time_zone_detector , time_zone_detector может уже получить предложения по новому алгоритму, и поэтому время устройства может быть немедленно изменено в соответствии с мнением службы time_zone_detector .

Определение часового пояса телефонии

Обнаружение часового пояса телефонии использует телефонные сигналы для определения текущего часового пояса. Дополнительную информацию см. в разделе «Определение часового пояса телефонии ».

Определение часового пояса местоположения

Определение часового пояса местоположения доступно на Android 12 или более поздней версии. Это дополнительная функция автоматического определения часового пояса, которая позволяет устройствам использовать свое местоположение для определения текущего часового пояса.

Служба location_time_zone_manager , представленная в Android 12, работает на системном сервере и содержит код, отвечающий за отправку предложений алгоритма определения местоположения в службу time_zone_detector . Дополнительную информацию см. в разделе «Определение часового пояса местоположения» .

Рекомендации по внедрению функций

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

Сравнение телефонии и определения местоположения

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

Обнаружение телефонии Определение местоположения
Корректность Зависит от страны.

Зависит от правильности и доступности MCC, NITZ.
Зависит от конфигурации функции или подключаемых компонентов.

Правильность обычно зависит от:
  • Точность и регулярность провайдера местоположения.
  • Качество данных карты часовых поясов.
Обновляемость Обнаружение телефонии основано на файлах, содержащихся в обновляемом модуле данных о часовых поясах (com.android.tzdata APEX). Зависит от конфигурации функции или подключаемых компонентов.

Возможность обновления обычно зависит от того, использует ли устройство данные карты часовых поясов сервера или клиента.

Примечание. Данные карты часовых поясов не содержатся в модуле «Данные о часовых поясах», который используется для обновления копии Android TZDB и другой информации о часовых поясах.

Производители устройств также должны учитывать согласованность версий между правилами часовых поясов и данными карты часовых поясов.
Потребление энергии Нет или низкое энергопотребление Зависит от настроек местоположения пользователя, используемых плагинов и, как правило, того, какие другие приложения запрашивают местоположение.
Доступность Только телефонные устройства. Обычно требуется рабочая 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 указывает на алгоритм определения местоположения.

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