Automatyczne wykrywanie czasu otrzymuje propozycje czasu z różnych źródeł, wybiera najlepszą opcję, a następnie ustawia zegar systemowy na Androidzie. W poprzednich wersjach Androida można było ustawić datę i godzinę na 2 sposoby: ręcznie dla każdego użytkownika lub automatycznie. Wybierz jedną z tych opcji:
telephony
używa sygnałów telefonii komórkowej dotyczących tożsamości sieci i strefy czasowej (NITZ).network
używa serwerów czasu zgodnych z protokołem NTP (Network Time Protocol).
Każda opcja wymaga połączenia 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ć wbudowanej funkcji telefonu. Dlatego w przypadku braku połączenia z internetem jako źródło czasu systemowego służy globalny system nawigacji satelitarnej (GNSS).
W nadchodzącej wersji Androida dostępne są 2 kolejne 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 System API.
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
Konfigurowanie źródeł czasu
Aby określić, które źródła czasu uwzględnić w automatycznym wykrywaniu czasu, oraz priorytet, z jakim te źródła czasu powinny być brane pod uwagę, musisz zmodyfikować plik konfiguracji 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ą brane pod uwagę podczas automatycznego wykrywania czasu, a sugestie dotyczące czasu telephony
mają wyższy priorytet niż sugestie dotyczące czasu network
.
Ogólnie rzecz biorąc, sugestie ze źródła o wyższym priorytecie są ignorowane, jeśli są nieprawidłowe lub zbyt stare. Jeśli ponadto propozycja z najwyższym priorytetem zgadza się z aktualnym czasem zegara systemowego urządzenia z dokładnością do kilku sekund (wartość domyślna to 2 sekundy), czas nie zostanie zmieniony.
Dolna granica czasu
Android 12 udostępnia nowy krótszy limit czasu do użycia podczas sprawdzania sugestii dotyczących czasu. Przed wprowadzeniem tej funkcji automatyczne wykrywanie czasu nie sprawdzało sugerowanego czasu UTC. Dzięki tej funkcji czasy, które upływają przed dolnym ograniczeniem, są odrzucane.
Wartość dolnej granicy jest określana na podstawie daty pochodzącej z sygnatura czasowej kompilacji. Działa to na zasadzie, że prawidłowy czas nie może wystąpić przed utworzeniem obrazu systemu. Android nie narzuca górnej granicy.
Sugerowane czasy GNSS
Źródło czasu gnss
jest nowością w Androidzie 12 i jest dostarczane przez sygnały GPS. Jest to wiarygodne źródło czasu, gdy opcje telephony
i network
są niedostępne.
Ta opcja została dodana do nowego procesu GnssTimeUpdateService
w SystemServer, który pasywnie odbiera aktualizacje lokalizacji. Gdy otrzymana zostanie prawidłowa lokalizacja, GnssTimeUpdateService
przekaże sugestię do TimeDetectorService
, która zdecyduje, czy zegar systemowy powinien zostać zaktualizowany.
Domyślnie źródło czasu gnss
nie jest włączone w AOSP, 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ść parametruconfig_enableGnssTimeUpdateService
musi wynosićtrue
. - Zaktualizuj
config_autoTimeSourcesPriority
. Do listy elementów w jednostce organizacyjnejconfig_autoTimeSourcesPriority
musisz dodać elementgnss
. Pozycjagnss
na liście priorytetów określa priorytet przypisany do sugestii GNSS w stosunku do wartości z innych źródeł.
Wpływ na moc
GnssTimeUpdateService
pasywnie odbiera informacje o lokalizacji, co oznacza, że nigdy nie włącza aktywnie GPS-a, aby zużywać dodatkowej energii. W rezultacie zużycie energii, gdy włączone jest źródło GNSS, jest znikome. Oznacza to też, że jeśli inna aplikacja lub usługa w systemie nie prosi aktywnie o aktualizacje lokalizacji, GnssTimeUpdateService
nie otrzyma aktualizacji lokalizacji ani nie zaproponuje czasu GNSS.
Testowanie
Compatibility Test Suite (CTS)
Test CTS służy do sprawdzenia, czy czas dostarczany przez GNSS jest dostępny. Więcej informacji: LocationShellCommand.java
.
Testy jednostkowe
Podstawowe testy jednostkowe znajdziesz w tym pliku:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Testy ręczne
Aby przetestować tę funkcję, do LocationShellCommand.java
dodaliśmy nowe polecenia. Użyj tych poleceń, aby dodać dostawców testowych, za pomocą których możesz określić lokalizację i powiązany z nią czas GNSS.
GnssTimeUpdateService
słucha tych aktualizacji lokalizacji i okresowo przedstawia sugestie.
Uwaga: interfejs tych poleceń może się zmieniać w kolejnych wersjach.
# 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>
Sugerowane terminy zewnętrzne
Zewnętrzne sugestie dotyczące czasu to kolejny sposób na automatyczne wyświetlanie sugestii dotyczących czasu na Androidzie. Te nowe opcje umożliwiają udostępnianie Androidowi w pełni spersonalizowanych sugestii dotyczących czasu, które mogą pochodzić z różnych sterowników ECU, które z kolei mogą korzystać z kombinacji zegara w czasie rzeczywistym, GNSS, NITZ lub innego źródła czasu.
W Androidzie 12 dostępne są następujące sugestie, które możesz wziąć pod uwagę jako external
sugestie dotyczące czasu:
- Właściwości VHAL Dostępna jest nowa właściwość VHAL o nazwie
EPOCH_TIME
. Ta właściwość oznacza liczbę milisekund, które upłynęły od 1 stycznia 1970 r. w czasie UTC. Jego wartość może zostać przekazana do AndroidaTimeManager
, aby zasugerować nowy czas systemowy. Przykładowa implementacja VHAL, która aktualizuje tę właściwość, jest dostępna w implementacji referencyjnej poniżej. - Interfejsy API systemu. W TimeManagerze dostępna jest nowa metoda o nazwie
suggestExternalTime()
, która umożliwia systemowi podanie zewnętrznej propozycji czasu. Jeśli system jest skonfigurowany tak, aby uwzględniać zewnętrzne sugestie dotyczące czasu (za pomocą parametruconfig_autoTimeSourcesPriority
w pliku konfiguracji), sygnatura czasowa przekazana do tej metody jest używana do ustawiania czasu systemowego, jeśli nie ma dostępnych sugestii dotyczących czasu o wyższym priorytecie.
Możesz wdrożyć zewnętrzne rozwiązanie dotyczące czasu w ten sposób:
- Zaktualizuj plik konfiguracji zasobu (
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>
W ten sposób Android będzie przypisywać zewnętrznym sugestiom dotyczące czasu najwyższy priorytet podczas ustawiania zegara systemowego. Sprzęt w pojazdach zapisuje propozycję sygnatury czasowej w nowej
EPOCH_TIME
usłudze VHAL. - Aplikacja dostarczona przez dostawcę odczytuje tę właściwość i wywoła funkcję
TimeManager.suggestExternal()
. Android może użyć podanego sygnatury czasu jako nowej wartości zegara systemowego.