Rilevamento automatico dell'ora riceve suggerimenti di orario da varie fonti, seleziona l'opzione migliore e poi imposta l'orologio di sistema in Android in modo che corrisponda. Le versioni precedenti di Android fornivano due modi per impostare la data e l'ora: impostazione manuale per utente o rilevamento automatico dell'ora, impostata da una di queste opzioni:
telephonyutilizza i segnali di telefonia Network Identity and Time Zone (NITZ).networkutilizza i server di orario Network Time Protocol (NTP).
Ogni opzione richiede connessioni a reti esterne, che non sono sempre disponibili in Android Automotive. Ad esempio, in alcuni paesi, alcune auto potrebbero non avere la telefonia integrata. Pertanto, l'ora dei sistemi di navigazione satellitare globali (GNSS) viene fornita come fonte di orario di sistema da utilizzare quando la connettività di rete non è disponibile.
Questa prossima release di Android offre altre due opzioni per rilevare e impostare automaticamente l'ora:
gnssutilizza i sistemi di navigazione satellitari globali (GNSS).externalutilizza una proprietà VHAL o l'API di sistema.
Attivare il rilevamento automatico dell'ora
Per attivare il rilevamento automatico dell'ora, assicurati di selezionare Impostazioni > Data e ora > Data e ora automatiche:

Figura 1. Seleziona Data e ora automatiche
Configurare le fonti di orario
Per specificare le fonti di orario da includere nel rilevamento automatico dell'ora e la priorità con cui devono essere prese in considerazione, devi modificare il file di configurazione delle risorse del dispositivo, 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>In questo esempio, telephony e network vengono presi in considerazione nel rilevamento automatico dell'ora e i suggerimenti di orario telephony hanno la priorità rispetto ai suggerimenti di orario network.
In generale, i suggerimenti di una fonte con priorità più alta vengono ignorati se non sono validi o se sono troppo vecchi. Inoltre, se il suggerimento valido con la priorità più alta corrisponde all'ora corrente dell'orologio di sistema del dispositivo entro alcuni secondi (il valore predefinito è due (2) secondi), l'ora non verrà modificata.
Limite inferiore dell'ora
Android 12 fornisce un nuovo limite inferiore dell'ora da utilizzare per la convalida dei suggerimenti di orario. Prima di questa funzionalità, il rilevamento automatico dell'ora non convalidava l'ora UTC in entrata suggerita. Con questa funzionalità, le ore che trascorrono prima del limite inferiore vengono eliminate.
Il valore del limite inferiore viene determinato da una data derivata dal timestamp della build. Questo funziona in base al principio che un'ora valida non può verificarsi prima della creazione dell'immagine di sistema. Android non applica un limite superiore.
Suggerimenti di orario GNSS
La fonte di orario gnss è una novità di Android 12 ed è fornita dai segnali GPS. Si tratta di una fonte affidabile per l'orario quando telephony e network non sono disponibili.
Questa opzione viene aggiunta al nuovo GnssTimeUpdateService in SystemServer che ascolta passivamente gli aggiornamenti della posizione. Quando viene ricevuta una posizione valida, GnssTimeUpdateService invia un suggerimento a TimeDetectorService, che determina se l'orologio di sistema deve essere aggiornato.
Per impostazione predefinita, la fonte di orario gnss non è abilitata in AOSP e, pertanto, deve essere abilitata dai partner:
<!-- 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>Per attivare questa funzionalità:
- Aggiorna
config_enableGnssTimeUpdateService. Il valore diconfig_enableGnssTimeUpdateServicedeve essere impostato sutrue. - Aggiorna
config_autoTimeSourcesPriority.gnssdeve essere aggiunto all' elenco di elementi perconfig_autoTimeSourcesPriority. La posizione dignssnell'elenco di priorità determina la priorità assegnata ai suggerimenti GNSS, rispetto ai valori da altre fonti.
Impatto sul consumo energetico
GnssTimeUpdateService ascolta passivamente gli aggiornamenti della posizione, il che significa che non attiva mai attivamente il GPS per consumare energia aggiuntiva. Di conseguenza, il consumo energetico quando la fonte GNSS è attiva è trascurabile. Ciò significa anche che, a meno che un'altra app o un altro servizio nel sistema non richieda attivamente aggiornamenti della posizione, GnssTimeUpdateService non riceve un aggiornamento della posizione e non suggerisce un orario GNSS.
Test
Suite di test di compatibilità (CTS)
Viene fornito un test CTS per verificare che sia disponibile un orario fornito da GNSS. Per maggiori dettagli, consulta LocationShellCommand.java.
Test delle unità
Consulta i test delle unità di base nel seguente file:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Test manuali
Per testare questa funzionalità, sono stati aggiunti nuovi comandi a LocationShellCommand.java. Utilizza questi comandi per aggiungere fornitori di test con cui puoi specificare una posizione e l'orario GNSS associato.
GnssTimeUpdateService ascolta questi aggiornamenti della posizione e invia periodicamente suggerimenti.
Nota: l'interfaccia di questi comandi potrebbe cambiare tra le release.
# 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>
Suggerimenti di orario esterni
I suggerimenti di orario esterni sono un altro modo per fornire suggerimenti di orario automatici ad Android. Questa nuova opzione ti consente di fornire suggerimenti di orario completamente personalizzati ad Android, che possono provenire da varie ECU che, a loro volta, possono utilizzare una combinazione di un orologio in tempo reale, GNSS, NITZ o qualsiasi altra fonte di orario.
In Android 12 sono disponibili i seguenti suggerimenti da considerare come external
suggerimenti di orario:
- Proprietà VHAL. Viene fornita una nuova
proprietà VHAL
denominata
EPOCH_TIME. Questa proprietà indica il numero di millisecondi trascorsi dal 01/01/1970 UTC. Il suo valore può essere passato a AndroidTimeManagerper suggerire un nuovo orario di sistema. Nella pagina di implementazione di riferimento è disponibile un'implementazione VHAL di esempio che aggiorna questa proprietà. - API di sistema. In TimeManager è disponibile un nuovo metodo chiamato
suggestExternalTime()per fornire al sistema un suggerimento di orario esterno. Se il sistema è configurato per tenere conto dei suggerimenti di orario esterni (utilizzandoconfig_autoTimeSourcesPrioritynel file di configurazione), il timestamp passato a questo metodo viene utilizzato per impostare l'orario di sistema, se non sono disponibili suggerimenti di orario con priorità più alta.
Puoi implementare una soluzione di orario esterno come descritto di seguito:
- Aggiorna il file di configurazione delle risorse (
core/res/res/values/config.xml) e poi aggiungi il valoreexternalaconfig_autoTimeSourcesPriority:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>In questo modo, Android assegna la priorità più alta ai suggerimenti di orario esterni quando imposta l'orologio di sistema. L'hardware del veicolo scrive un suggerimento di timestamp nella nuova
EPOCH_TIMEproprietà VHAL. - Un'app fornita dal fornitore legge questa proprietà e chiama
TimeManager.suggestExternal(). Android può quindi utilizzare il timestamp fornito come nuovo valore dell'orologio di sistema.