Il rilevamento automatico dell'ora riceve suggerimenti di tempo da varie fonti; seleziona il l'opzione migliore, quindi imposta l'orologio di sistema in Android di conseguenza. Release di Android precedenti fornite puoi impostare data e ora in due modi: manualmente per utente o tramite rilevamento automatico dell'ora, e imposta in base a una delle seguenti opzioni:
telephony
utilizza i segnali di telefonia dell'identità di rete e del fuso orario (NITZ).network
utilizza i server di riferimento orario NTP (Network Time Protocol).
Ogni opzione richiede connessioni a reti esterne, che non sono sempre disponibili in Android Auto e motori. Ad esempio, in alcuni paesi alcune auto potrebbero non disporre della telefonia integrata. Pertanto, L'orario GNSS (Global Satellite Navigation Systems) viene fornito come fonte del sistema da utilizzare quando la connettività di rete non è disponibile.
In questa prossima release di Android sono disponibili altre due opzioni per rilevare e impostare automaticamente l'ora:
gnss
utilizza il satellite globale Sistemi di navigazione (GNSS).external
usi una proprietà VHAL o l'API di sistema.
Attiva il rilevamento automatico del tempo
Per attivare il rilevamento automatico dell'ora, assicurati di selezionare Impostazioni > Data e Ora > Data e data automatiche Ora:
Figura 1. Seleziona Data e ora automatiche Data/ora
Configura le origini dell'ora
Per specificare le origini dell'ora da includere nel rilevamento automatico dell'ora e la priorità
in cui devono essere prese in considerazione queste origini temporali, devi modificare la risorsa
file di configurazione, 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
sono considerati in
il rilevamento automatico del tempo e i suggerimenti di tempo per telephony
hanno la priorità
in anticipo rispetto a network
suggerimenti di orario.
In generale, i suggerimenti provenienti da un'origine con priorità più elevata vengono ignorati se i suggerimenti non è valido o se il suggerimento è troppo vecchio. Inoltre, se il suggerimento valido con priorità più alta corrisponde all'ora attuale dell'orologio di sistema del dispositivo entro alcuni secondi (il valore predefinito è di due (2) secondi), l'ora non verrà modificata.
Limite di tempo inferiore
Android 12 offre un nuovo limite di tempo inferiore da utilizzare quando che convalidano i suggerimenti di tempo. Prima di questa funzione, il rilevamento automatico del tempo non convalidava ora UTC in arrivo suggerita. Con questa funzione, i tempi prima del limite inferiore vengono eliminato.
Il valore del limite inferiore è determinato da una data derivata dal timestamp di build. Funziona su secondo il quale non può esistere un tempo valido prima della creazione dell'immagine di sistema. Android non un limite superiore.
Suggerimenti di orario GNSS
La fonte dell'ora di gnss
è nuova per Android 12 e viene fornita dai segnali GPS. Questo è
una fonte attendibile per conoscere i casi in cui telephony
e network
non sono disponibili.
Questa opzione viene aggiunta al nuovo GnssTimeUpdateService
in
SystemServer ascolta passivamente gli aggiornamenti della posizione. Quando viene ricevuta una sede valida,
GnssTimeUpdateService
dà un suggerimento a TimeDetectorService
, che
determina se l'orologio di sistema deve essere aggiornato.
Per impostazione predefinita, l'origine orario gnss
non è abilitata in AOSP e, di conseguenza,
devono essere attivati 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 perconfig_enableGnssTimeUpdateService
deve essere impostato sutrue
. - Aggiorna
config_autoTimeSourcesPriority
.gnss
deve essere aggiunto al elenco di elementi perconfig_autoTimeSourcesPriority
. La posizione dignss
dell'elenco di priorità determina la priorità assegnata ai suggerimenti GNSS rispetto ai valori provenienti da altre fonti.
Impatto sulla potenza
GnssTimeUpdateService
ascolta passivamente gli aggiornamenti sulla posizione, il che significa che
non accende mai attivamente il GPS per consumare più energia. Di conseguenza, la corrente consumata quando
l'origine GNSS abilitata è trascurabile. Ciò significa anche che, a meno che non sia presente un'altra app o un altro servizio
il sistema richiede attivamente aggiornamenti sulla posizione, GnssTimeUpdateService
non ottiene una posizione
aggiornare e suggerire 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, vedi
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
LocationShellCommand.java
. Utilizza questi comandi per aggiungere test
con cui puoi specificare una località e l'orario GNSS associato.
GnssTimeUpdateService
ascolta questi aggiornamenti sulla posizione e periodicamente
fornisce suggerimenti.
Nota:l'interfaccia di questi comandi potrebbe variare 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 esterno
I suggerimenti di orario esterni sono un altro modo per fornire suggerimenti automatici per gli orari Android. Queste nuove opzioni ti consentono di fornire ad Android suggerimenti di orario completamente personalizzati, che possono provenire da varie ECU che, a loro volta, possono utilizzare una combinazione di orologio in tempo reale, GNSS, NITZ o qualsiasi altra fonte dell'ora.
In Android 12 sono disponibili i seguenti suggerimenti da considerare come external
suggerimenti di orario:
- Proprietà VHAL. Un nuovo
Proprietà VHAL
denominato
EPOCH_TIME
. Questa proprietà indica il numero di millisecondi trascorsi dall'1/1/1970 UTC. Il suo valore può essere passato AndroidTimeManager
per suggerire un nuovo orario di sistema. Un esempio di VHAL che aggiorna questa proprietà è fornita nella implementazione del riferimento di seguito. - API di sistema. Un nuovo metodo chiamato
suggestExternalTime()
è disponibile in TimeManager per fornire al sistema un suggerimento orario esterno. Se il sistema è configurato per prendere in considerazione i suggerimenti di orario esterni (utilizzandoconfig_autoTimeSourcesPriority
nel file di configurazione), il timestamp a questo metodo viene utilizzato per impostare l'ora di sistema, se non sono presenti suggerimenti di data/ora priorità disponibili.
Puoi implementare una soluzione temporale esterna come descritto di seguito:
- Aggiorna il file di configurazione delle risorse (
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 si indica ad Android di dare la massima priorità ai suggerimenti di orario esterni durante l'impostazione l'orologio di sistema. L'hardware sul veicolo scrive un suggerimento di timestamp per il nuovo
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.