In Android 12 und höher kann Android optional ein Global Navigation Satellite System (GNSS) verwenden, um dem time_detector
-Dienst Unix-Epochenzeiten vorzuschlagen.
Diese Funktion ist in AOSP nicht standardmäßig aktiviert.
Wenn die GNSS-Zeiterkennung aktiviert ist, empfängt gnss_time_update_service
passiv Standortaktualisierungen von GNSS-Quellen und sendet GNSS-Vorschläge an den time_detector
-Dienst. Der time_detector
-Dienst entscheidet dann, ob die Systemuhr entsprechend dem Vorschlag aktualisiert werden soll.
Auswirkungen auf den Stromverbrauch
AOSP gnss_time_update_service
empfängt Standortaktualisierungen passiv. Das bedeutet, dass der Dienst das GPS nie aktiv einschaltet oder zusätzlichen Strom verbraucht. Das bedeutet auch, dass gnss_time_update_service
kein Standortupdate erhält und keine GNSS-Zeit vorschlägt, wenn nicht aktiv Standortupdates von einer anderen App oder einem anderen Dienst im System angefordert werden.
Implementierung
Damit die GNSS-Zeiterkennung aktiviert werden kann, müssen Gerätehersteller gnss_time_update_service
explizit auf dem Systemserver aktivieren.
Sowohl die config_enableGnssTimeUpdateService
- als auch die config_autoTimeSourcesPriority
-Werte in der Datei core/res/res/values/config.xml
müssen aktualisiert werden, damit diese Funktion aktiviert werden kann. Legen Sie den Wert für config_enableGnssTimeUpdateService
auf true
fest und fügen Sie gnss
der Artikelliste für config_autoTimeSourcesPriority
hinzu. Die Position von gnss
in der Prioritätsliste bestimmt die Priorität, die GNSS-Vorschlägen im Vergleich zu Vorschlägen aus anderen Quellen zugewiesen wird.
Das Folgende ist ein Beispiel für eine core/res/res/values/config.xml
-Datei, in der die GNSS-Zeiterkennung aktiviert ist und gnss
nach network
und telephony
an dritter Stelle in der Prioritätsliste steht:
<!-- 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>
<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>
Fehler beheben und testen
Verwenden Sie adb shell cmd location
-Befehle, um die GNSS-Zeiterkennung zu testen.
Mit diesen Befehlen können Sie Teststandortanbieter hinzufügen, bei denen Sie einen Standort und die zugehörige GNSS-Zeit angeben können. gnss_time_update_service
hört auf diese Standortaktualisierungen und macht regelmäßig Vorschläge.
Im Folgenden finden Sie Beispiele für adb shell cmd location
-Befehle:
Aktivieren Sie die Standorteinstellungen für den Vordergrundnutzer (in der Regel Nutzer
10
in Fahrzeugen). Wenn du das Gerät gerade erst geflasht hast, kannst du das im Einrichtungsassistenten tun.adb shell cmd location set-location-enabled true --user 10
GPS-Testanbieter hinzufügen (schlägt in der Regel beim ersten Mal fehl und löst eine Sicherheitsausnahme mit
android from <SOME_UID> not allowed to perform MOCK_LOCATION
aus)adb shell cmd location providers add-test-provider gps
Berechtigung für simulierte Standorte für die vorherige UID aktivieren
adb shell appops set UID_PRINTED_IN_PREVIOUS_ERROR android:mock_location allow
GPS-Testanbieter hinzufügen (sollte ohne Fehler funktionieren)
adb shell cmd location providers set-test-provider-enabled gps true
GPS-Testanbieter aktivieren
adb shell cmd location providers set-test-provider-enabled gps true
Standort mit Zeit festlegen (die Zeit darf nicht niedriger sein als das durch die Untergrenze festgelegte Limit)
adb shell cmd location providers set-test-provider-location gps --location LATITUDE,LONGITUDE --time TIME