Автоматическое определение времени получает предложения по времени из различных источников, выбирает лучший вариант, а затем настраивает системные часы Android в соответствии с ними. В предыдущих выпусках Android было два способа установки даты и времени: вручную для каждого пользователя или путем автоматического определения времени и установки с помощью одного из следующих параметров:
-
telephony
использует сигналы телефонной идентификации сети и часового пояса (NITZ). -
network
используются серверы времени Network Time Protocol (NTP).
Для каждого варианта требуется подключение к внешним сетям, которые не всегда доступны в Android Automotive. Например, в некоторых странах некоторые автомобили могут не иметь встроенной телефонной связи. Таким образом, время Глобальной спутниковой навигационной системы (GNSS) предоставляется в качестве источника системного времени, который вы можете использовать, когда сетевое соединение недоступно.
В предстоящем выпуске Android предусмотрены еще две опции для автоматического определения и установки времени:
-
gnss
использует глобальные спутниковые навигационные системы (GNSS). -
external
использует свойство VHAL или системный API.
Включить автоматическое определение времени
Чтобы включить автоматическое определение времени, обязательно выберите «Настройки» > «Дата и время» > «Автоматическая дата и время» :
Рисунок 1. Выбор автоматической даты и времени
Настройка источников времени
Чтобы указать, какие источники времени следует включать в автоматическое определение времени, а также приоритет, с которым эти источники времени следует учитывать, необходимо изменить файл конфигурации ресурсов устройства core/res/res/values/config.xml
:
<!-- 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>telephony</item> <item>network</item> </string-array>
В этом примере telephony
и network
учитываются при автоматическом определении времени, а предложения по времени telephony
имеют приоритет перед предложениями по времени network
.
Вообще говоря, предложения из источника с более высоким приоритетом игнорируются, если предложение недействительно или слишком старо. Кроме того, если действительное предложение с наивысшим приоритетом соответствует текущему системному времени устройства с точностью до нескольких секунд (значение по умолчанию — две (2) секунды), время не будет изменено.
Нижняя граница времени
В Android 12 предусмотрено новое более низкое время, которое можно использовать при проверке предложений по времени. До появления этой функции автоматическое определение времени не проверяло предлагаемое входящее время в формате UTC. Благодаря этой функции время, прошедшее до нижней границы, отбрасывается.
Значение нижней границы определяется на основе даты, полученной из отметки времени сборки. Это работает по принципу, что допустимое время не может появиться до того, как будет построен образ системы. Android не устанавливает верхнюю границу.
Рекомендации по времени GNSS
Источник времени gnss
является новым для Android 12 и обеспечивается сигналами GPS. Это надежный источник информации о времени, когда telephony
и network
недоступны. Эта опция добавлена в новую GnssTimeUpdateService
в SystemServer, которая пассивно прослушивает обновления местоположения. Когда получено действительное местоположение, GnssTimeUpdateService
делает предложение TimeDetectorService
, который затем определяет, следует ли обновить системные часы.
По умолчанию источник времени gnss
не включен в 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>telephony</item> <item>network</item> <item>gnss</item> </string-array> <!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. --> <bool name="config_enableGnssTimeUpdateService">true</bool>
Чтобы включить эту функцию:
- Обновите
config_enableGnssTimeUpdateService
. Значениеconfig_enableGnssTimeUpdateService
должно быть установлено вtrue
. - Обновите
config_autoTimeSourcesPriority
.gnss
необходимо добавить в список элементов дляconfig_autoTimeSourcesPriority
. Положениеgnss
в списке приоритетов определяет приоритет предложений GNSS по отношению к значениям из других источников.
Влияние на власть
GnssTimeUpdateService
пассивно прослушивает обновления местоположения, а это означает, что он никогда активно не включает GPS для потребления дополнительной энергии. В результате потребляемая мощность при включенном источнике GNSS незначительна. Это также означает, что, если другое приложение или служба в системе активно не запрашивает обновления местоположения, GnssTimeUpdateService
не получает обновления местоположения и не предлагает время GNSS.
Тестирование
Набор тестов совместимости (CTS)
Тест CTS предназначен для проверки доступности времени, предоставленного GNSS. Подробности см. LocationShellCommand.java
.
Модульные тесты
См. базовые модульные тесты в следующем файле:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Ручные тесты
Чтобы протестировать эту функцию, в LocationShellCommand.java
были добавлены новые команды. Используйте эти команды, чтобы добавить поставщиков тестов, с помощью которых вы можете указать местоположение и соответствующее время GNSS. GnssTimeUpdateService
прослушивает эти обновления местоположения и периодически вносит предложения.
Примечание. Интерфейс этих команд может меняться в разных выпусках.
# Enable Master Location Switch in the foreground user (usually user 10 on automotive). # If you just flashed, this can be done through Setup Wizard. adb shell cmd location set-location-enabled true --user 10 # Add GPS test provider (this usually fails the first time and will throw a SecurityException # with "android from <some-uid> not allowed to perform MOCK_LOCATION".) adb shell cmd location providers add-test-provider gps # Enable mock location permissions for previous UID adb shell appops set <uid printed in previous error> android:mock_location allow # Add GPS test provider (Should work with no errors.) adb shell cmd location providers add-test-provider gps # Enable GPS test provider adb shell cmd location providers set-test-provider-enabled gps true # Set location with time (time can't be earlier than the limit set by the lower bound.) adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>
Внешние предложения по времени
Внешние предложения времени — это еще один способ автоматически предлагать время для Android. Эта новая опция позволяет вам предоставлять Android полностью настраиваемые предложения времени, которые могут исходить от различных блоков управления двигателем, которые, в свою очередь, могут использовать комбинацию часов реального времени, GNSS, NITZ или любого другого источника времени.
В Android 12 доступны следующие предложения, которые можно рассматривать как external
предложения по времени:
- Свойства ВХАЛ. Предоставляется новое свойство VHAL с именем
EPOCH_TIME
. Это свойство обозначает количество миллисекунд, прошедших с 01.01.1970 UTC. Его значение можно передать в AndroidTimeManager
, чтобы предложить новое системное время. Пример реализации VHAL, обновляющей это свойство, представлен в эталонной реализации ниже. - Системные API. В TimeManager доступен новый метод
suggestExternalTime()
позволяющий предоставить системе внешнее предложение времени. Если система настроена на учет внешних предложений по времени (с использованиемconfig_autoTimeSourcesPriority
в файле конфигурации), метка времени, переданная этому методу, используется для установки системного времени, если нет доступных предложений по времени с более высоким приоритетом.
Вы можете реализовать внешнее решение времени, как описано ниже:
- Обновите файл конфигурации ресурса (
core/res/res/values/config.xml
), а затем добавьте значениеexternal
вconfig_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
Это предписывает Android отдавать внешним предложениям времени наивысший приоритет при настройке системных часов. Аппаратное обеспечение автомобиля записывает предложение временной метки в новое свойство VHAL
EPOCH_TIME
. - Приложение, предоставленное поставщиком, считывает это свойство и вызывает
TimeManager.suggestExternal()
. Затем Android может использовать предоставленную метку времени в качестве нового значения системных часов.