Automatyczne wykrywanie czasu

Automatyczne wykrywanie czasu otrzymuje z różnych źródeł proponowane terminy, wybiera i ustawia tak samo jak zegar systemowy. Udostępniliśmy poprzednie wersje Androida datę i godzinę: ustaw ręcznie dla każdego użytkownika lub użyj automatycznego wykrywania czasu, możesz skorzystać z jednej z tych opcji:

  • telephony korzysta z sygnałów telefonicznych NITZ (tożsamość sieci i strefy czasowej).
  • network używa serwerów czasu NTP (Network Time Protocol).

Każda opcja wymaga połączeń z sieciami zewnętrznymi, które nie zawsze są dostępne na Androidzie Motoryzacja. Na przykład w niektórych krajach niektóre samochody nie mają wbudowanej funkcji telefonicznej. Dlatego Czas globalnego systemu nawigacji satelitarnej (GNSS) jest źródłem systemu do wykorzystania, gdy połączenie sieciowe jest niedostępne.

Nowa wersja Androida udostępnia dwie dodatkowe opcje automatycznego wykrywania i ustawiania godziny:

  • gnss używa globalnego satelity Systemy nawigacyjne (GNSS).
  • Zastosowania: external we właściwości VHAL lub za pomocą interfejsu System API.

Włącz automatyczne wykrywanie czasu

Aby włączyć automatyczne wykrywanie czasu, wybierz Ustawienia > Data i Czas > Automatyczna data Godzina:

Rysunek 1. Wybierz opcję Automatyczna data i Godzina

Skonfiguruj źródła czasu

Aby określić źródła czasu, które mają być uwzględniane w automatycznym wykrywaniu czasu, oraz priorytet w których te źródła czasu powinny być brane pod uwagę, musisz zmodyfikować zasób urządzenia plik konfiguracji, 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 wartości telephony i network są uwzględniane w elemencie automatyczne wykrywanie czasu i sugestie dotyczące godziny (telephony) są traktowane priorytetowo przed network sugestiami.

Ogólnie rzecz biorąc, sugestie ze źródła o wyższym priorytecie są ignorowane, jeśli są ignorowane jest nieprawidłowa lub sugestia jest zbyt stara. Jeśli sugestia o najwyższym priorytecie jest prawidłowa, dopasowuje do aktualnego zegara systemowego urządzenia z dokładnością do kilku sekund (wartość domyślna) wynosi dwie (2) sekundy), czas nie ulegnie zmianie.

Dolna granica czasu

W Androidzie 12 obowiązują nowe niższe przedziały czasowe, których można używać w przypadku weryfikuję proponowane terminy. Wcześniej automatyczne wykrywanie czasu nie sprawdzało sugerowanego czasu UTC. Dzięki tej funkcji czasy, które upływają przed dolną granicą, są odrzucono.

Dolna granica jest określana na podstawie daty wyodrębnionej na podstawie sygnatury czasowej kompilacji. Działa na: z zasady, że prawidłowy czas nie może wystąpić przed utworzeniem obrazu systemu. Android wyegzekwować górną granicę.

Sugestie dotyczące czasu według GNSS

Źródło czasu gnss jest nowe w Androidzie 12 i jest dostarczane na podstawie sygnałów GPS. To jest niezawodnym źródłem czasu, gdy funkcje telephony i network są niedostępne. Ta opcja jest dodana do nowych GnssTimeUpdateService w: Serwer systemowy, który pasywnie nasłuchuje aktualizacji lokalizacji. Po otrzymaniu prawidłowej lokalizacji GnssTimeUpdateService dodaje sugestię do: TimeDetectorService, co a następnie określa, czy zegar systemowy powinien być zaktualizowany.

Domyślnie źródło czasu gnss nie jest włączone w AOSP, dlatego muszą być 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ę:

  1. Zaktualizuj urządzenie config_enableGnssTimeUpdateService. Wartość pola Pole config_enableGnssTimeUpdateService musi mieć wartość true.
  2. Zaktualizuj urządzenie config_autoTimeSourcesPriority. gnss należy dodać do lista produktów w kategorii config_autoTimeSourcesPriority. Pozycja gnss określa priorytet nadawany sugestiom GNSS względem wartości z innych źródeł.

Wpływ na zasilanie

Usługa GnssTimeUpdateService pasywnie nasłuchuje aktualizacji lokalizacji, co oznacza, że nigdy nie włącza GPS-a w celu zużywania dodatkowej energii. W efekcie moc zużywana, gdy źródło GNSS jest pomijane. Oznacza to również, że jeśli inna aplikacja lub usługa w tej sekcji system aktywnie prosi o aktualizację lokalizacji, GnssTimeUpdateService jej nie otrzymuje aktualizować i proponować czas GNSS.

Testowanie

Zestaw testów zgodności (CTS)

Przeprowadzany jest test CTS, aby sprawdzić, czy czas podany 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ę, dodaliśmy nowe polecenia do polecenia LocationShellCommand.java Użyj tych poleceń, aby dodać test dostawców, za pomocą których możesz określić lokalizację i powiązany czas GNSS. GnssTimeUpdateService nasłuchuje tych powiadomień o lokalizacji oraz okresowo przesyła sugestie.

Uwaga: interfejs tych poleceń może się zmieniać w poszczególnych 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>

Zewnętrzne sugerowane terminy

Zewnętrzne sugestie dotyczące terminu to inny sposób dostarczania automatycznych sugestii dotyczących czasu na urządzeniu z Androidem. Te nowe opcje umożliwiają w pełni które mogą pochodzić z różnych jednostek ECU, które z kolei mogą korzystać z kombinacji zegara czasu rzeczywistego, GNSS, NITZ ani dowolne inne źródło czasu.

W Androidzie 12 dostępne są poniższe sugestie, które można wziąć pod uwagę jako external proponowane terminy:

  • Właściwości VHAL. Nowy Właściwość VHAL o nazwie EPOCH_TIME. Ta właściwość oznacza liczbę milisekund, które upłynęły od 1.01.1970 r. czasu UTC. Jego wartość można przekazać do funkcji Android TimeManager proponuje nowy czas systemowy. Przykładowy VHAL która aktualizuje tę właściwość, jest udostępniana w implementacja referencyjna poniżej.
  • Systemowe interfejsy API. Nowa metoda o nazwie suggestExternalTime() jest dostępna w menedżerze czasu. Jeśli system jest skonfigurowany tak, aby uwzględniał zewnętrzne sugestie dotyczące czasu (przy użyciu funkcji config_autoTimeSourcesPriorityz plikiem konfiguracji) sygnatura czasowa jest przekazywana do tej metody i służy do ustawiania czasu systemowego, jeśli nie ma wyższych wartości. według priorytetów.

Możesz wdrożyć zewnętrzne rozwiązanie czasowe w sposób opisany poniżej:

  1. Zaktualizuj plik konfiguracji zasobów (core/res/res/values/config.xml) a następnie dodaj wartość external do config_autoTimeSourcesPriority:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>

    W ten sposób Android będzie traktować zewnętrzne sugestie dotyczące czasu z najwyższym priorytetem zegar systemowy. Sprzęt w pojeździe zapisuje sugestię z sygnaturą czasową w nowym EPOCH_TIME Właściwość VHAL.

  2. Aplikacja dostarczona przez dostawcę odczytuje tę usługę i wywołuje funkcję TimeManager.suggestExternal() Android może następnie użyć podanej sygnatury czasowej jako nową wartość zegara systemowego.