Automatyczne wykrywanie czasu otrzymuje sugestie dotyczące czasu z różnych źródeł, wybiera najlepszą opcję, a następnie ustawia zegar systemowy w Androidzie. W poprzednich wersjach Androida były 2 sposoby ustawiania daty i godziny: ręcznie przez użytkownika lub za pomocą automatycznego wykrywania czasu. Można było wybrać jedną z tych opcji:
telephonyużywa sygnałów telefonicznych NITZ (Network Identity and Time Zone).networkużywa serwerów czasu NTP (Network Time Protocol).
Każda z tych opcji 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 telefonicznej. Dlatego czas globalnych systemów nawigacji satelitarnej (GNSS) jest udostępniany jako źródło czasu systemowego, z którego możesz korzystać, gdy nie ma połączenia z siecią.
Ta nadchodząca wersja Androida zawiera 2 dodatkowe opcje automatycznego wykrywania i ustawiania czasu:
gnssużywa globalnych systemów nawigacji satelitarnej (GNSS).externalużywa właściwości VHAL lub interfejsu API systemu.
Włączanie automatycznego wykrywania czasu
Aby włączyć automatyczne wykrywanie czasu, wybierz kolejno Ustawienia > Data i godzina > Automatyczna data i godzina:

Rysunek 1. Wybierz Automatyczna data i godzina
Konfigurowanie źródeł czasu
Aby określić, które źródła czasu mają być uwzględniane w automatycznym wykrywaniu czasu, oraz priorytet, z jakim te źródła czasu mają 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 w automatycznym wykrywaniu czasu są uwzględniane źródła telephony i network, a sugestie dotyczące czasu z telephony mają wyższy priorytet niż sugestie dotyczące czasu z 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 sugestia o najwyższym priorytecie jest zgodna z bieżącym 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 wprowadza nową dolną granicę czasu, która będzie używana podczas sprawdzania poprawności sugestii dotyczących czasu. Wcześniej automatyczne wykrywanie czasu nie sprawdzało poprawności sugerowanego przychodzącego czasu UTC. Dzięki tej funkcji czasy, które upłynęły przed dolną granicą, są odrzucane.
Wartość dolnej granicy jest określana na podstawie daty pochodzącej ze znacznika czasu kompilacji. Działa to na zasadzie, że prawidłowy czas nie może wystąpić przed utworzeniem obrazu systemu. Android nie wymusza górnej granicy.
Sugestie dotyczące czasu 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 źródła telephony i network są niedostępne.
Ta opcja jest dodawana do nowej usługi GnssTimeUpdateService w SystemServer, która pasywnie nasłuchuje aktualizacji lokalizacji. Gdy zostanie odebrana prawidłowa lokalizacja, usługa GnssTimeUpdateService wysyła sugestię do usługi TimeDetectorService, która następnie określa, czy należy zaktualizować zegar systemowy.
Domyślnie źródło czasu gnss jest wyłą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ść dlaconfig_enableGnssTimeUpdateServicemusi być ustawiona natrue. - Zaktualizuj
config_autoTimeSourcesPriority.gnssnależy dodać do listy elementówconfig_autoTimeSourcesPriority. Pozycjagnssna liście priorytetów określa priorytet sugestii GNSS w stosunku do wartości z innych źródeł.
Wpływ na zużycie energii
Usługa GnssTimeUpdateService pasywnie nasłuchuje aktualizacji lokalizacji, co oznacza, że nigdy aktywnie nie włącza GPS, aby zużywać dodatkową energię. Dzięki temu zużycie energii, gdy źródło GNSS jest włączone, jest znikome. Oznacza to również, że jeśli inna aplikacja lub usługa w systemie nie zażąda aktywnie aktualizacji lokalizacji, usługa GnssTimeUpdateService nie otrzyma aktualizacji lokalizacji i nie zasugeruje czasu GNSS.
Testowanie
Pakiet testów zgodności (CTS)
Dostępny jest test CTS, który sprawdza, czy dostępny jest czas podany przez GNSS. Więcej informacji znajdziesz w pliku 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 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 z nią czas GNSS.
Usługa GnssTimeUpdateService nasłuchuje tych aktualizacji lokalizacji i okresowo wysyła 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>
Sugestie dotyczące czasu zewnętrznego
Zewnętrzne sugestie dotyczące czasu to kolejny sposób na automatyczne sugerowanie czasu w Androidzie. Te nowe opcje umożliwiają dostarczanie do Androida w pełni dostosowanych sugestii dotyczących czasu, które mogą pochodzić z różnych ECU, które z kolei mogą używać kombinacji zegara czasu rzeczywistego, GNSS, NITZ lub innego źródła czasu.
W Androidzie 12 dostępne są te sugestie, które można uznać za sugestie dotyczące czasu external:
- 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. czasu UTC. Jej wartość można przekazać do AndroidaTimeManager, aby zasugerować nowy czas systemowy. Przykładowa implementacja VHAL która aktualizuje tę właściwość, jest dostępna na stronie implementacji referencyjnej. - Interfejsy API systemu. W usłudze TimeManager dostępna jest nowa metoda o nazwie
suggestExternalTime(), która umożliwia przekazywanie do systemu zewnętrznej sugestii dotyczącej czasu. Jeśli system jest skonfigurowany tak, aby uwzględniać zewnętrzne sugestie dotyczące czasu (za pomocąconfig_autoTimeSourcesPriorityw pliku konfiguracji), znacznik czasu przekazany do tej metody jest używany do ustawienia czasu systemowego, jeśli nie są dostępne sugestie dotyczące czasu o wyższym priorytecie.
Rozwiązanie dotyczące czasu zewnętrznego możesz zaimplementować w sposób opisany poniżej:
- Zaktualizuj plik konfiguracji zasobów (
core/res/res/values/config.xml) a następnie dodaj wartośćexternaldoconfig_autoTimeSourcesPriority:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>Dzięki temu Android będzie przyznawać zewnętrznym sugestiom dotyczącym czasu najwyższy priorytet podczas ustawiania zegara systemowego. Sprzęt w pojeździe zapisuje sugestię znacznika czasu w nowej
EPOCH_TIMEwłaściwości VHAL. - Aplikacja dostarczona przez dostawcę odczytuje tę właściwość i wywołuje
TimeManager.suggestExternal(). Android może wtedy użyć podanego znacznika czasu jako nowej wartości zegara systemowego.