Automatische Zeiterkennung

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:

  1. Aktualisieren Sie config_enableGnssTimeUpdateService . Der Wert für config_enableGnssTimeUpdateService muss auf true gesetzt sein.
  2. Aktualisieren Sie config_autoTimeSourcesPriority . gnss muss zur Elementliste für config_autoTimeSourcesPriority hinzugefügt werden. Die Position von gnss 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 Android TimeManager ü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 von config_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:

  1. Aktualisieren Sie die Ressourcenkonfigurationsdatei ( core/res/res/values/config.xml ) und fügen Sie dann den Wert external zu config_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 .

  2. Eine vom Anbieter bereitgestellte App liest diese Eigenschaft und ruft TimeManager.suggestExternal() auf. Android kann dann den bereitgestellten Zeitstempel als neuen Systemuhrwert verwenden.