Il rilevamento automatico dell'ora riceve suggerimenti sull'ora da varie fonti, seleziona l'opzione migliore e imposta l'orologio di sistema in Android in modo che corrisponda. Le release Android precedenti fornivano due modi per impostare la data e l'ora: manualmente per utente o tramite il rilevamento automatico dell'ora e impostate tramite una di queste opzioni:
telephony
utilizza gli indicatori di telefonia relativi all'identità di rete e al fuso orario (NITZ).network
utilizza server di ora NTP (Network Time Protocol).
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, il tempo dei sistemi di navigazione satellitare globali (GNSS) viene fornito come origine del tempo di sistema da utilizzare quando la connettività di rete non è disponibile.
Questa imminente release di Android offre altre due opzioni per rilevare e impostare automaticamente l'ora:
gnss
utilizza i sistemi di navigazione satellitare globali (GNSS).external
utilizza una proprietà VHAL o l'API System.
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 origini di tempo
Per specificare le origini di tempo 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 per il rilevamento automatico dell'ora e i suggerimenti relativi all'ora telephony
hanno la priorità rispetto a quelli relativi all'ora network
.
In generale, i suggerimenti di un'origine con priorità più elevata 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 è 2 secondi), l'ora non verrà modificata.
Limite di tempo inferiore
Android 12 fornisce un nuovo limite di tempo inferiore da utilizzare per la convalida dei suggerimenti relativi all'ora. Prima di questa funzionalità, il rilevamento automatico dell'ora non convalidava l'ora UTC in arrivo suggerita. Con questa funzionalità, i tempi che trascorrono prima del limite inferiore vengono ignorati.
Il valore limite inferiore viene determinato da una data derivata dal timestamp della compilazione. Questo funziona sulla base del principio che un'ora valida non può verificarsi prima della creazione dell'immagine di sistema. Android non impone un limite superiore.
Suggerimenti di orario GNSS
L'origine ora gnss
è una novità di Android 12 ed è fornita dagli indicatori GPS. Si tratta di una fonte affidabile per i periodi in cui 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
fa un suggerimento a TimeDetectorService
, che
poi determina se l'orologio di sistema deve essere aggiornato.
Per impostazione predefinita, l'origine ora gnss
non è attivata in AOSP e, pertanto, deve essere attivata 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_enableGnssTimeUpdateService
deve essere impostato sutrue
. - Aggiorna
config_autoTimeSourcesPriority
.gnss
deve essere aggiunto all'elenco di articoli perconfig_autoTimeSourcesPriority
. La posizione dignss
nell'elenco di priorità determina la priorità assegnata ai suggerimenti GNSS rispetto ai valori di altre origini.
Impatto sulla potenza
GnssTimeUpdateService
ascolta passivamente gli aggiornamenti della posizione, il che significa che non attiva mai attivamente il GPS per consumare ulteriore energia. Di conseguenza, la potenza consumata quando la sorgente GNSS è attivata è 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'ora GNSS.
Test
Compatibility Test Suite (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 di 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 servizi di test con cui puoi specificare una posizione e l'ora GNSS associata.
GnssTimeUpdateService
ascolta questi aggiornamenti sulla posizione e periodicamente fa dei suggerimenti.
Nota:l'interfaccia di questi comandi può cambiare da una release all'altra.
# 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 relativi all'ora esterni sono un altro modo per fornire suggerimenti automatici sull'ora ad Android. Queste nuove opzioni ti consentono di fornire suggerimenti sull'ora 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 origine oraria.
In Android 12 sono disponibili i seguenti suggerimenti da prendere in considerazione come suggerimenti external
relativi all'orario:
- Proprietà VHAL. Viene fornita una nuova
proprietà VHAL
denominata
EPOCH_TIME
. Questa proprietà indica il numero di millisecondi trascorsi dal 1/1/1970 UTC. Il relativo valore può essere passato ad AndroidTimeManager
per suggerire un nuovo orario di sistema. Un'implementazione VHAL di esempio che aggiorna questa proprietà è fornita nell'implementazione di riferimento di seguito. - API di sistema. In TimeManager è disponibile un nuovo metodo denominato
suggestExternalTime()
per fornire al sistema un suggerimento di orario esterno. Se il sistema è configurato per tenere conto di suggerimenti di orario esterni (utilizzandoconfig_autoTimeSourcesPriority
nel file di configurazione), il timestamp passato a questo metodo viene utilizzato per impostare l'ora di sistema, se non sono disponibili suggerimenti di orario di priorità più elevata.
Puoi implementare una soluzione di tempo esterno come descritto di seguito:
- Aggiorna il file di configurazione della risorsa (
core/res/res/values/config.xml
) e poi aggiungi il valoreexternal
aconfig_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
In questo modo, Android dà la massima priorità ai suggerimenti di orario esterni quando imposta l'orologio di sistema. L'hardware del veicolo scrive un suggerimento per il timestamp nella nuova
EPOCH_TIME
proprietà 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.