Automatyczne wykrywanie czasu otrzymuje sugestie dotyczące czasu z różnych źródeł, wybiera najlepszą opcję, a następnie ustawia odpowiednio zegar systemowy w Androidzie. Poprzednie wersje Androida zapewniały dwa sposoby ustawiania daty i godziny — ustawiane ręcznie dla użytkownika lub poprzez automatyczne wykrywanie czasu i ustawiane za pomocą jednej z następujących opcji:
-
telephony
wykorzystuje sygnały telefoniczne identyfikujące tożsamość sieciową i strefę czasową (NITZ). -
network
korzysta z serwerów czasu protokołu Network Time Protocol (NTP).
Każda opcja wymaga połączeń z sieciami zewnętrznymi, które nie zawsze są dostępne w Android Automotive. Na przykład w niektórych krajach niektóre samochody mogą nie mieć wbudowanego telefonu. Dlatego czas globalnego systemu nawigacji satelitarnej (GNSS) jest źródłem czasu systemowego, z którego można korzystać, gdy łączność sieciowa jest niedostępna.
W nadchodzącej wersji Androida dostępne są jeszcze dwie opcje automatycznego wykrywania i ustawiania czasu:
-
gnss
korzysta z globalnych systemów nawigacji satelitarnej (GNSS). -
external
używa właściwości VHAL lub interfejsu API systemu.
Włącz automatyczne wykrywanie czasu
Aby włączyć automatyczne wykrywanie czasu, wybierz Ustawienia > Data i godzina > Automatyczna data i godzina :
Rysunek 1. Wybierz opcję Automatyczna data i godzina
Skonfiguruj źródła czasu
Aby określić, które źródła czasu mają być uwzględnione w automatycznym wykrywaniu czasu oraz jaki priorytet mają te źródła czasu uwzględniać, należy zmodyfikować plik konfiguracyjny zasobów urządzenia, 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>
W tym przykładzie telephony
i network
są uwzględniane podczas automatycznego wykrywania czasu, a sugestie czasu telephony
są traktowane priorytetowo przed sugestiami czasu network
.
Ogólnie rzecz biorąc, sugestie ze źródła o wyższym priorytecie są ignorowane, jeśli są nieprawidłowe lub są zbyt stare. Ponadto, jeśli prawidłowa sugestia o najwyższym priorytecie odpowiada aktualnemu czasowi zegara systemowego urządzenia z dokładnością do kilku sekund (wartość domyślna to dwie (2) sekundy), czas nie zostanie zmieniony.
Niższy limit czasowy
W systemie Android 12 dostępny jest nowy , niższy czas, który będzie używany podczas sprawdzania sugestii dotyczących czasu. Przed tą funkcją automatyczne wykrywanie czasu nie sprawdzało sugerowanego przychodzącego czasu UTC. Dzięki tej funkcji czasy, które upłynęły przed dolną granicą, są odrzucane.
Dolna wartość graniczna jest określana na podstawie daty pochodzącej ze sygnatury czasowej kompilacji. Działa to na zasadzie, że nie może upłynąć ważny czas przed zbudowaniem obrazu systemu. Android nie wymusza górnej granicy.
Sugestie czasu GNSS
Źródło czasu gnss
jest nowością w systemie Android 12 i jest dostarczane przez sygnały GPS. Jest to niezawodne źródło czasu, gdy telephony
i network
nie są dostępne. Ta opcja została dodana do nowej GnssTimeUpdateService
na serwerze SystemServer, która pasywnie nasłuchuje aktualizacji lokalizacji. Po odebraniu prawidłowej lokalizacji GnssTimeUpdateService
wysyła sugestię do TimeDetectorService
, która następnie określa, czy należy zaktualizować zegar systemowy.
Domyślnie źródło czasu gnss
nie jest włączone w AOSP i dlatego musi zostać włączone przez partnerów:
<!-- 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>
Aby włączyć tę funkcję:
- Zaktualizuj
config_enableGnssTimeUpdateService
. Wartośćconfig_enableGnssTimeUpdateService
musi być ustawiona natrue
. - Zaktualizuj
config_autoTimeSourcesPriority
.gnss
należy dodać do listy pozycji dlaconfig_autoTimeSourcesPriority
. Pozycjagnss
na liście priorytetów określa priorytet nadawany sugestiom GNSS w stosunku do wartości z innych źródeł.
Wpływ na moc
GnssTimeUpdateService
biernie nasłuchuje aktualizacji lokalizacji, co oznacza, że nigdy aktywnie nie włącza GPS w celu zużycia dodatkowej energii. W rezultacie pobór mocy przy włączonym źródle GNSS jest znikomy. Oznacza to również, że jeśli inna aplikacja lub usługa w systemie aktywnie nie zażąda aktualizacji lokalizacji, GnssTimeUpdateService
nie otrzyma aktualizacji lokalizacji i nie zasugeruje czasu GNSS.
Testowanie
Zestaw testów zgodności (CTS)
Test CTS służy do sprawdzenia, czy dostępny jest czas podany przez GNSS. Aby uzyskać szczegółowe informacje, zobacz LocationShellCommand.java
.
Testy jednostkowe
Zobacz podstawowe testy jednostkowe w następującym pliku:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Testy ręczne
Aby przetestować tę funkcję, do pliku LocationShellCommand.java
dodano nowe polecenia. Użyj tych poleceń, aby dodać dostawców testów, za pomocą których możesz określić lokalizację i powiązany czas GNSS. GnssTimeUpdateService
nasłuchuje aktualizacji lokalizacji i okresowo przedstawia sugestie.
Uwaga: interfejs tych poleceń może się zmieniać w zależności od wersji.
# 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>
Sugestie dotyczące czasu zewnętrznego
Zewnętrzne sugestie czasu to kolejny sposób na zapewnienie automatycznych sugestii czasu dla Androida. Te nowe opcje umożliwiają dostarczanie do Androida całkowicie spersonalizowanych sugestii czasu, które mogą pochodzić z różnych ECU, które z kolei mogą korzystać z kombinacji zegara czasu rzeczywistego, GNSS, NITZ lub dowolnego innego źródła czasu.
Poniższe sugestie są dostępne w systemie Android 12 i można je uwzględnić jako sugestie dotyczące czasu external
:
- Właściwości VHALA. Dodano nową właściwość VHAL o nazwie
EPOCH_TIME
. Ta właściwość oznacza liczbę milisekund, które upłynęły od 1/1/1970 UTC. Jego wartość można przekazać do menedżera czasu AndroidTimeManager
, aby zasugerować nowy czas systemowy. Przykładową implementację VHAL, która aktualizuje tę właściwość, przedstawiono w poniższej implementacji referencyjnej . - Interfejsy API systemu. W TimeManager dostępna jest nowa metoda o nazwie
suggestExternalTime()
, która zapewnia systemowi zewnętrzną sugestię czasu. Jeśli system jest skonfigurowany tak, aby uwzględniał zewnętrzne sugestie czasu (przy użyciuconfig_autoTimeSourcesPriority
w pliku konfiguracyjnym), znacznik czasu przekazany tej metodzie służy do ustawienia czasu systemowego, jeśli nie są dostępne sugestie czasu o wyższym priorytecie.
Możesz wdrożyć zewnętrzne rozwiązanie czasowe, jak opisano poniżej:
- Zaktualizuj plik konfiguracyjny zasobów (
core/res/res/values/config.xml
), a następnie dodaj wartośćexternal
doconfig_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
Spowoduje to, że Android nada sugestiom czasu zewnętrznego najwyższy priorytet podczas ustawiania zegara systemowego. Sprzęt w pojeździe zapisuje sugestię znacznika czasu do nowej właściwości VHAL
EPOCH_TIME
. - Aplikacja dostarczona przez dostawcę odczytuje tę właściwość i wywołuje funkcję
TimeManager.suggestExternal()
. Android może następnie użyć podanego znacznika czasu jako nowej wartości zegara systemowego.