Automatische Zeiterkennung

Die automatische Zeiterkennung erhält Zeitvorschläge aus verschiedenen Quellen und wählt die und stellt dann die Systemuhr in Android entsprechend ein. Frühere Android-Releases bereitgestellt Es gibt zwei Möglichkeiten, Datum und Uhrzeit einzustellen, entweder manuell pro Nutzer oder durch die automatische Zeiterkennung. mit einer der folgenden Optionen:

  • telephony verwendet NITZ-Telefoniesignale (Network Identity and Time Zone).
  • network verwendet NTP-Zeitserver (Network Time Protocol).

Für jede Option sind Verbindungen zu externen Netzwerken erforderlich, die unter Android nicht immer verfügbar sind. Autos So sind zum Beispiel in einigen Ländern manche Autos keine integrierte Telefoniefunktion. Dementsprechend wird Die Zeit des Global Satellite Navigation Systems (GNSS) wird als Systemquelle zur Verfügung gestellt. die Sie verwenden können, wenn keine Netzwerkverbindung verfügbar ist.

Diese neue Android-Version bietet zwei weitere Optionen zum automatischen Erkennen und Einstellen der Uhrzeit:

  • gnss verwendet Global Satellite Navigationssysteme (GNSS):
  • external verwendet eine VHAL-Eigenschaft oder die System API.

Automatische Zeiterkennung aktivieren

Um die automatische Zeiterkennung zu aktivieren, wählen Sie Einstellungen > Datum und Zeit > Automatisches Datum & Zeit:

Abbildung 1. Wählen Sie „Automatisches Datum“ und Uhrzeit

Zeitquellen konfigurieren

Um festzulegen, welche Zeitquellen in die automatische Zeiterkennung einbezogen werden sollen, sowie die Priorität in denen diese Zeitquellen berücksichtigt werden sollen, müssen Sie die Geräteressource Konfigurationsdatei 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>

In diesem Beispiel werden telephony und network in folgenden Fällen betrachtet: automatische Zeiterkennung und telephony Zeitvorschläge werden priorisiert network Terminvorschlägen voraus.

Im Allgemeinen werden Vorschläge aus einer Quelle mit höherer Priorität ignoriert, wenn der Vorschlag ist entweder ungültig oder der Vorschlag ist zu alt. Wenn der gültige Vorschlag mit der höchsten Priorität entspricht der aktuellen Systemuhrzeit des Geräts auf wenige Sekunden (Standardwert zwei (2) Sekunden beträgt, bleibt die Zeit unverändert.

Untere Zeitgrenze

Android 12 bietet eine neue niedrigere Zeitgrenze für den Fall, dass der Validierung von Zeitvorschlägen. Vor dieser Funktion konnte die automatische Zeiterkennung den vorgeschlagene eingehende UTC-Zeit. Mit dieser Funktion werden Zeiten, die vor der Untergrenze liegen, verworfen.

Der untere Grenzwert wird anhand eines Datums bestimmt, das aus dem Build-Zeitstempel abgeleitet wird. Das funktioniert auf Das Prinzip, dass vor dem Erstellen des System-Images keine gültige Zeit auftreten kann. Android tut Folgendes nicht: eine Obergrenze durchsetzen.

GNSS-Zeitvorschläge

Die Zeitquelle „gnss“ ist in Android 12 neu und wird von GPS-Signalen bereitgestellt. Dies ist eine zuverlässige Quelle für Zeiten, in denen telephony und network nicht verfügbar sind. Diese Option wird der neuen GnssTimeUpdateService in SystemServer, der passiv auf Standortaktualisierungen wartet. Wenn ein gültiger Standort empfangen wird, GnssTimeUpdateService macht TimeDetectorService einen Vorschlag, bestimmt dann, ob die Systemuhr aktualisiert werden soll.

Standardmäßig ist die Zeitquelle gnss in AOSP nicht aktiviert und daher muss 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. config_enableGnssTimeUpdateService aktualisieren. Der Wert für config_enableGnssTimeUpdateService muss auf true festgelegt sein.
  2. config_autoTimeSourcesPriority aktualisieren. gnss muss hinzugefügt werden zu: Artikelliste für config_autoTimeSourcesPriority. Die Position von gnss in der Prioritätsliste bestimmt die Priorität, die GNSS-Vorschlägen in Bezug auf Werte eingeräumt wird aus anderen Quellen stammen.

Auswirkungen auf die Stromversorgung

GnssTimeUpdateService hört passiv auf Standortaktualisierungen, was bedeutet, dass es Das GPS wird nie aktiv eingeschaltet, um zusätzlichen Strom zu verbrauchen. Daraus folgt, dass der Energieverbrauch die aktivierte GNSS-Quelle vernachlässigbar ist. Sofern keine andere App oder ein anderer Dienst im System fordert aktiv Standortaktualisierungen an, GnssTimeUpdateService erhält keinen Standort aktualisieren und eine GNSS-Zeit vorschlagen.

Testen

Kompatibilitätstest-Suite (Kompatibilitätstest-Suite, CTS)

Es wird ein CTS-Test durchgeführt, um zu prüfen, ob eine von GNSS angegebene Zeit verfügbar ist. Weitere Informationen finden Sie unter LocationShellCommand.java

Einheitentests

Die grundlegenden Einheitentests finden Sie in der folgenden Datei:

atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java

Manuelle Tests

Zum Testen dieser Funktion wurden neue Befehle LocationShellCommand.java Verwenden Sie diese Befehle, um test Anbieter, mit denen Sie einen Standort und die zugehörige GNSS-Zeit angeben können. GnssTimeUpdateService hört diese Standortaktualisierungen regelmäßig macht Vorschläge.

Hinweis:Die Benutzeroberfläche für diese Befehle kann sich von Version zu Releases ä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, Ihren Nutzern automatische Zeitvorschläge zur Verfügung zu stellen. Android Mit dieser neuen Option kannst du Android ganz individuell angepasste Zeitvorschläge machen, die von verschiedenen ECUs stammen können, die wiederum eine Kombination aus Echtzeituhr, GNSS, NITZ oder einer anderen Zeitquelle.

Die folgenden Vorschläge sind in Android 12 verfügbar und können als external betrachtet werden Terminvorschläge:

  • VHAL-Eigenschaften. Eine neue VHAL-Property mit dem Namen EPOCH_TIME ist angegeben. Diese Eigenschaft gibt die Anzahl der Millisekunden, die seit dem 01.01.1970 UTC vergangen sind Sein Wert kann an den Android TimeManager, um eine neue Systemzeit vorzuschlagen. Beispiel-VHAL Implementierung, mit der diese Property aktualisiert wird, wird in der Referenzimplementierung unten.
  • System-APIs: Eine neue Methode namens suggestExternalTime() ist in TimeManager verfügbar, um dem System einen externen Zeitvorschlag bereitzustellen. Wenn das System so konfiguriert ist, dass externe Zeitvorschläge berücksichtigt werden (mithilfe von config_autoTimeSourcesPriority in der Konfigurationsdatei), der Zeitstempel die an diese Methode übergeben wird, zur Festlegung der Systemzeit verwendet wird, wenn es keine höheren Vorschläge für priorisierte Zeit verfügbar.

Sie können eine externe Zeitlösung wie unten beschrieben implementieren:

  1. Ressourcenkonfigurationsdatei (core/res/res/values/config.xml) aktualisieren 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 Festlegen der Einstellung die höchste Priorität zu geben. die Systemuhr. Die Hardware am Fahrzeug schreibt einen Zeitstempelvorschlag in das neue EPOCH_TIME VHAL-Attribut.

  2. Eine vom Anbieter bereitgestellte App liest diese Property und ruft sie auf TimeManager.suggestExternal() Android kann dann den angegebenen Zeitstempel als neuen Wert für die Systemuhr ein.