Die automatische Zeiterkennung empfängt Zeitvorschläge aus verschiedenen Quellen, wählt die beste Option aus und stellt dann die Systemuhr in Android entsprechend ein. Frühere Android-Versionen boten zwei Möglichkeiten zum Einstellen von Datum und Uhrzeit, entweder manuell pro Benutzer oder durch automatische Zeiterkennung und festgelegt durch eine dieser Optionen:
-
telephony
werden NITZ-Telefonsignale (Network Identity and Time Zone) verwendet. -
network
verwendet NTP-Zeitserver (Network Time Protocol).
Für jede Option sind Verbindungen zu externen Netzwerken erforderlich, die in Android Automotive nicht immer verfügbar sind. Beispielsweise verfügen einige Autos in manchen Ländern möglicherweise nicht über eine integrierte Telefonanlage. Daher wird Ihnen die Zeit des globalen Satellitennavigationssystems (GNSS) als Systemzeitquelle zur Verfügung gestellt, die Sie nutzen können, wenn keine Netzwerkverbindung verfügbar ist.
Diese kommende Android-Version bietet zwei weitere Optionen zur automatischen Erkennung und Einstellung der Zeit:
-
gnss
nutzt globale Satellitennavigationssysteme (GNSS). -
external
verwendet eine VHAL-Eigenschaft oder die System-API.
Aktivieren Sie die automatische Zeiterkennung
Um die automatische Zeiterkennung zu aktivieren, wählen Sie unbedingt Einstellungen > Datum und Uhrzeit > Automatisches Datum und Uhrzeit aus:
Abbildung 1. Wählen Sie Automatisches Datum und Uhrzeit
Zeitquellen konfigurieren
Um anzugeben, welche Zeitquellen in die automatische Zeiterkennung einbezogen werden sollen und mit welcher Priorität diese Zeitquellen berücksichtigt werden sollen, müssen Sie die Ressourcenkonfigurationsdatei des Geräts, core/res/res/values/config.xml
ändern:
<!-- 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>
In diesem Beispiel werden telephony
und network
bei der automatischen Zeiterkennung berücksichtigt und telephony
haben Vorrang vor network
.
Im Allgemeinen werden Vorschläge aus einer Quelle mit höherer Priorität ignoriert, wenn der Vorschlag entweder ungültig oder zu alt ist. Auch wenn der gültige Vorschlag mit der höchsten Priorität mit der aktuellen Systemuhrzeit des Geräts auf mehrere Sekunden genau übereinstimmt (der Standardwert beträgt zwei (2) Sekunden), wird die Zeit nicht geändert.
Niedrigere Zeitgrenze
Android 12 bietet eine neue niedrigere Zeitgrenze , die bei der Validierung von Zeitvorschlägen verwendet werden kann. Vor dieser Funktion konnte die automatische Zeiterkennung die vorgeschlagene eingehende UTC-Zeit nicht validieren. Mit dieser Funktion werden Zeiten, die vor der Untergrenze vergehen, verworfen.
Der untere Grenzwert wird anhand eines Datums bestimmt, das aus dem Build-Zeitstempel abgeleitet wird. Dies basiert auf dem Prinzip, dass vor der Erstellung des Systemabbilds kein gültiger Zeitpunkt liegen kann. Android erzwingt keine Obergrenze.
GNSS-Zeitvorschläge
Die gnss
Zeitquelle ist neu in Android 12 und wird durch GPS-Signale bereitgestellt. Dies ist eine zuverlässige Quelle für Zeiten, in denen telephony
und network
nicht verfügbar sind. Diese Option wird dem neuen GnssTimeUpdateService
in SystemServer hinzugefügt, der passiv auf Standortaktualisierungen lauscht. Wenn ein gültiger Standort empfangen wird, macht GnssTimeUpdateService
einen Vorschlag an TimeDetectorService
, der dann bestimmt, ob die Systemuhr aktualisiert werden soll.
Standardmäßig ist die gnss
Zeitquelle in AOSP nicht aktiviert und muss daher von Partnern aktiviert werden:
<!-- 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>
So aktivieren Sie diese Funktion:
- Aktualisieren Sie
config_enableGnssTimeUpdateService
. Der Wert fürconfig_enableGnssTimeUpdateService
muss auftrue
gesetzt sein. - Aktualisieren Sie
config_autoTimeSourcesPriority
.gnss
muss zur Elementliste fürconfig_autoTimeSourcesPriority
hinzugefügt werden. Die Position vongnss
in der Prioritätenliste bestimmt die Priorität, die GNSS-Vorschlägen im Vergleich zu Werten aus anderen Quellen gegeben wird.
Auswirkungen auf die Macht
GnssTimeUpdateService
lauscht passiv auf Standortaktualisierungen, was bedeutet, dass es das GPS niemals aktiv einschaltet, um zusätzlichen Strom zu verbrauchen. Daher ist der Stromverbrauch bei aktivierter GNSS-Quelle vernachlässigbar. Dies bedeutet auch, dass GnssTimeUpdateService
keine Standortaktualisierung erhält und keine GNSS-Zeit vorschlägt, es sei denn, eine andere App oder ein anderer Dienst im System fordert aktiv Standortaktualisierungen an.
Testen
Kompatibilitätstestsuite (CTS)
Es wird ein CTS-Test bereitgestellt, um zu überprüfen, ob eine vom GNSS bereitgestellte Zeit verfügbar ist. Einzelheiten finden Sie unter LocationShellCommand.java
.
Unit-Tests
Die grundlegenden Komponententests finden Sie in der folgenden Datei:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Manuelle Tests
Um diese Funktion zu testen, wurden neue Befehle zu LocationShellCommand.java
hinzugefügt. Mit diesen Befehlen fügen Sie Testanbieter hinzu, mit denen Sie einen Standort und die zugehörige GNSS-Zeit angeben können. GnssTimeUpdateService
hört auf diese Standortaktualisierungen und macht regelmäßig Vorschläge.
Hinweis: Die Schnittstelle für diese Befehle kann sich zwischen den Versionen ändern.
# 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>
Externe Zeitvorschläge
Externe Zeitvorschläge sind eine weitere Möglichkeit, Android automatische Zeitvorschläge bereitzustellen. Mit diesen neuen Optionen können Sie völlig individuelle Zeitvorschläge für Android bereitstellen, die von verschiedenen Steuergeräten stammen können, die wiederum eine Kombination aus Echtzeituhr, GNSS, NITZ oder einer anderen Zeitquelle verwenden können.
Die folgenden Vorschläge stehen in Android 12 zur Verfügung, um sie als external
Zeitvorschläge zu berücksichtigen:
- VHAL-Eigenschaften. Es wird eine neue VHAL-Eigenschaft mit dem Namen
EPOCH_TIME
bereitgestellt. Diese Eigenschaft gibt die Anzahl der Millisekunden an, die seit dem 1.1.1970 UTC vergangen sind. Sein Wert kann an den AndroidTimeManager
übergeben werden, um eine neue Systemzeit vorzuschlagen. Eine Beispiel-VHAL-Implementierung, die diese Eigenschaft aktualisiert, wird in der Referenzimplementierung unten bereitgestellt. - System-APIs. Im TimeManager steht eine neue Methode namens
suggestExternalTime()
zur Verfügung, um dem System einen externen Zeitvorschlag bereitzustellen. Wenn das System so konfiguriert ist, dass es externe Zeitvorschläge berücksichtigt (mithilfe vonconfig_autoTimeSourcesPriority
in der Konfigurationsdatei), wird der an diese Methode übergebene Zeitstempel zum Festlegen der Systemzeit verwendet, wenn keine Zeitvorschläge mit höherer Priorität verfügbar sind.
Sie können eine externe Zeitlösung wie folgt implementieren:
- Aktualisieren Sie die Ressourcenkonfigurationsdatei (
core/res/res/values/config.xml
) und fügen Sie dann den Wertexternal
zuconfig_autoTimeSourcesPriority
hinzu:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
Dadurch wird Android angewiesen, externen Zeitvorschlägen beim Einstellen der Systemuhr höchste Priorität einzuräumen. Die Hardware des Fahrzeugs schreibt einen Zeitstempelvorschlag in die neue VHAL-Eigenschaft
EPOCH_TIME
. - Eine vom Anbieter bereitgestellte App liest diese Eigenschaft und ruft
TimeManager.suggestExternal()
auf. Android kann dann den bereitgestellten Zeitstempel als neuen Systemuhrwert verwenden.