Questa pagina descrive come funziona il rilevamento dell'ora e del fuso orario su Android. Ciò include il modo in cui Android rileva automaticamente l'ora e i fusi orari, le opzioni di configurazione per i produttori dei dispositivi e le informazioni sui test.
Panoramica dell'ora e dei fusi orari
Per determinare l'ora locale di un utente da visualizzare in posizioni come la barra di stato, Android tiene traccia di due stati correlati ma indipendenti:
- L'attuale epoca Unix
- Il fuso orario attuale
L'ora corrente dell'epoca Unix e il fuso orario corrente sono stati a livello di dispositivo, il che significa che sono condivisi da tutti gli utenti di un dispositivo.
L'attuale epoca Unix non è un valore fisso. Si aggiorna automaticamente per riflettere il passare del tempo. Oltre al normale passare del tempo, l'attuale epoca Unix di un dispositivo viene regolata se risulta errata, ad esempio, dopo che un dispositivo ha perso alimentazione.
Il fuso orario corrente determina la regolazione da apportare per convertire l'ora corrente dell'epoca Unix in un'ora locale. Ad esempio, durante l'estate a Los Angeles, il dispositivo sottrae 7 ore dall'attuale ora dell'epoca Unix e in inverno sottrae 8 ore.
Per supportare questi calcoli dell'ora locale, tutti i dispositivi Android dispongono di un database di tutte le regole del fuso orario globale . Per ulteriori informazioni sulle regole del fuso orario, vedere Regole del fuso orario .
Quando un utente si reca in una nuova posizione che utilizza un fuso orario diverso, non è necessario modificare l'ora dell'epoca Unix corrente, ma l'utente in genere desidera vedere l'ora locale anziché l'ora nella posizione precedente. La modifica del fuso orario corrente garantisce che venga applicato l'offset corretto all'ora dell'epoca Unix corrente per visualizzare l'ora locale corretta per la nuova posizione.
AOSP consente agli utenti di controllare in modo indipendente se l'ora e il fuso orario sono impostati automaticamente per loro attraverso i seguenti meccanismi.
- Rilevamento automatico dell'ora: garantisce che il dispositivo abbia l'ora dell'epoca Unix corrente corretta.
- Rilevamento automatico del fuso orario: garantisce che il dispositivo abbia il fuso orario corrente corretto.
Rilevamento automatico del tempo
Questa sezione fornisce una panoramica del servizio time_detector
che gestisce il rilevamento automatico del tempo, i controlli utente, le opzioni di configurazione e i dettagli dei test.
Il servizio time_detector
Il servizio time_detector
, presente sui dispositivi con Android 10 o versioni successive, gestisce il rilevamento automatico del tempo. Regola l'ora dell'epoca Unix corrente del dispositivo secondo necessità quando è abilitato il rilevamento automatico dell'ora.
Il servizio time_detector
è sempre in uno dei due stati: incerto o certo . Lo stato certo o incerto del servizio è determinato dai suggerimenti temporali che riceve da varie fonti.
Quando il servizio time_detector
è certo, ovvero ha ricevuto un suggerimento con le informazioni sull'ora dell'epoca Unix, sovrascrive l'ora dell'epoca Unix corrente se l'ora suggerita è diversa dall'ora dell'epoca Unix corrente.
Quando time_detector
è incerto, non sovrascrive l'ora corrente. Lo stato incerto di solito significa che il servizio time_detector
non ha ricevuto suggerimenti sull'orario. Anche il servizio time_detector
diventa incerto se i suggerimenti ricevuti sono considerati troppo vecchi per essere utilizzati. L'età dei suggerimenti viene presa in considerazione perché le regolazioni che utilizzano i vecchi suggerimenti temporali dell'epoca Unix si basano sull'orologio in tempo reale trascorso sul dispositivo, che si presume sia impreciso per lunghi periodi.
Per stabilire automaticamente l'ora corrente dell'epoca Unix, un dispositivo può utilizzare varie fonti. Queste sono chiamate origini in questo documento. Il servizio time_detector
tratta le sequenze di suggerimenti come distinte in base alla loro origine.
Il servizio time_detector
è stateful, il che significa che mantiene un registro del suggerimento più recente fatto da ciascuna origine. Nuovi suggerimenti vengono forniti a time_detector
se un'origine ha a disposizione informazioni temporali sull'epoca Unix più recenti. Il servizio time_detector
rivaluta i suggerimenti nuovi ed esistenti e aggiorna lo stato del dispositivo quando vengono ricevuti suggerimenti.
Sebbene l'ora UTC sia concordata a livello internazionale, ci sono vari motivi per cui stabilire l'ora attuale dell'epoca Unix non è sempre semplice per un dispositivo Android:
- L'ora dell'epoca Unix è un sistema di cronometraggio leggermente diverso dall'ora UTC. La conversione tra i due richiede la conoscenza di quando si verificano i secondi intercalari e di come vengono gestiti dalle origini.
- Le origini potrebbero essere disponibili solo in determinati orari o in determinate circostanze. Ad esempio, se l'origine richiede connettività di rete, potrebbe essere disponibile solo mentre il dispositivo è connesso a Internet.
- Le origini potrebbero essere imprecise o imprecise oppure contenere errori. Ad esempio, se un ripetitore di telefonia mobile non tiene traccia correttamente del "tempo universale", l'origine della telefonia potrebbe fornire suggerimenti orari imprecisi.
- Potrebbero essere introdotte imprecisioni durante l'ottenimento dell'ora dell'epoca Unix. Ad esempio, un ritardo di rete, un buffering o una pianificazione del processo potrebbero rendere imprecisa l'ora dell'epoca Unix.
- L'orologio di riferimento utilizzato per regolare un suggerimento in base al tempo trascorso dalla ricezione del suggerimento potrebbe essere impreciso.
Esistono due origini principali di rilevamento dell'ora configurate per l'utilizzo per impostazione predefinita in AOSP:
- Rete : utilizza i server di riferimento temporale NTP (Network Time Protocol).
- Telefonia: utilizza i segnali di telefonia Network Identity and Time Zone (NITZ).
Sia la telefonia che l'origine della rete richiedono la connettività a reti esterne, che non sono sempre disponibili.
A partire da Android 12, Android supporta anche le seguenti origini, che non sono configurate per l'uso per impostazione predefinita:
- GNSS : utilizza il provider di posizione GPS per ottenere l'ora da una fonte GNSS.
- Esterno : origine generica che consente ai produttori di dispositivi di integrare la propria fonte di tempo epoca Unix.
Impostazioni dell'ora
Gli utenti possono abilitare il rilevamento automatico dell'ora in Sistema > Data e ora nell'app Impostazioni AOSP.
Figura 1. Rilevamento automatico del tempo nelle Impostazioni.
La tabella seguente descrive i controlli utente per il rilevamento del tempo nell'app Impostazioni AOSP.
*Su Android 11 e versioni precedenti, questa impostazione è denominata Utilizza l'orario fornito dalla rete | |||
Posizione delle impostazioni AOSP | Nome delle impostazioni AOSP | Scopo | Comportamento |
---|---|---|---|
Sistema > Data e ora | Imposta l'ora automaticamente* | Tutti gli utenti | Un interruttore. Quando è attivo , il dispositivo è responsabile del rilevamento dell'ora dell'epoca Unix corrente. Quando è disattivato , agli utenti vengono forniti i controlli per impostare manualmente l'ora del dispositivo. |
Quando l'utente inserisce l'ora manualmente, inserisce l'ora locale, non l'ora dell'epoca Unix. L'ora dell'epoca Unix corrente viene calcolata utilizzando il fuso orario corrente per ricavare l'ora dell'epoca Unix.
Configurazione
I produttori di dispositivi possono configurare il servizio time_detector
in vari modi, ad esempio quali origini utilizzare e come dare priorità ai segnali provenienti da esse.
Priorità all'origine
A partire da Android 12, i produttori di dispositivi possono modificare il file di configurazione core/res/res/values/config.xml
per specificare quali origini temporali includere nel rilevamento automatico dell'ora e la priorità con cui time_detector
considera queste origini.
Per i dispositivi con Android 11 o versioni precedenti, la priorità di origine è codificata su ["telephony", "network"]
, il che significa che i suggerimenti di telefonia hanno la priorità rispetto ai suggerimenti di rete.
La configurazione AOSP predefinita è la seguente:
<!-- 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>network</item>
<item>telephony</item>
</string-array>
In Android 12, i suggerimenti di rete e telefonia sono configurati come origini da utilizzare per impostazione predefinita. I suggerimenti sull'orario di rete hanno la priorità rispetto ai suggerimenti sull'orario di telefonia. I produttori di dispositivi possono modificare l'ordine delle origini per ripristinare il comportamento di Android 11 o versioni precedenti, dove alla telefonia viene data una priorità più alta.
Per impostazione predefinita, se il suggerimento valido con la priorità più alta corrisponde all'ora dell'orologio di sistema corrente del dispositivo entro un paio di secondi, l'ora del dispositivo non verrà modificata. Questo per evitare di creare lavoro per le app installate che ascoltano l'intento ACTION_TIME_CHANGED
.
I valori di origine consentiti sono:
Limiti temporali consentiti
Android 14 introduce un limite temporale superiore per i suggerimenti temporali ricevuti dal servizio time_detector
. Se il dispositivo supporta processi a 32 bit, il framework imposta un limite temporale superiore per impedire al dispositivo di utilizzare un suggerimento temporale che potrebbe attivare il problema Y2038.
Android 12 ha introdotto un limite temporale inferiore utilizzato per convalidare i suggerimenti orari ricevuti dal servizio time_detector
. Il valore del limite temporale inferiore utilizzato per i suggerimenti automatici viene impostato dal timestamp della build. Funziona in base al principio che un tempo valido non può essere precedente alla creazione dell'immagine di sistema del dispositivo. Se un suggerimento temporale è precedente al limite temporale inferiore, il servizio time_detector
scarta il suggerimento perché non può essere valido se il timestamp di compilazione è corretto.
Per i dispositivi che eseguono Android 11 o versioni precedenti, il servizio time_detector
non convalida i suggerimenti temporali dell'epoca Unix in arrivo.
Debug e test temporali
Questa sezione fornisce informazioni su come eseguire il debug e testare il comportamento del servizio time_detector
e di altri componenti condivisi da tutte le origini.
Interagire con il servizio time_detector
Per visualizzare la configurazione del servizio time_detector
e lo stato del servizio time_detector
, utilizzare:
adb shell cmd time_detector dump
Per visualizzare comandi aggiuntivi per il debug e il test del rilevamento del fuso orario, utilizzare:
adb shell cmd time_detector help
L'output della guida descrive inoltre le proprietà del servizio device_config che possono essere utilizzate per influenzare il comportamento di time_detector
per il test o in produzione. Per i dettagli, vedere Configurazione di un dispositivo utilizzando il servizio device_config .
Per convalidare il rilevamento automatico dell'ora, i tester devono essere consapevoli di quali origini sta utilizzando il servizio time_detector
. Di seguito è riportato un esempio dell'output del comando adb shell cmd time_detector dump
, con le informazioni sull'origine corrente e sullo stato del servizio in grassetto:
$ adb shell cmd time_detector dump
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=null
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=23717241
mEnvironment.systemClockMillis()=1626707861336
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
...
Telephony suggestion history:
...
Network suggestion history:
...
Gnss suggestion history:
...
External suggestion history:
...
Le informazioni possono essere interpretate come segue:
Chiave | Valore |
---|---|
mEnvironment.isAutoTimeDetectionEnabled() | Se è abilitato il rilevamento automatico dell'ora. |
mEnvironment.autoTimeLowerBound() | L'attuale limite inferiore utilizzato per convalidare i suggerimenti temporali. |
mEnvironment.autoOriginPriorities() | Le origini in uso e l'ordine di priorità. |
Il registro delle modifiche dell'ora indica le occasioni in cui il servizio time_detector
ha modificato l'ora corrente dell'epoca Unix del dispositivo.
Le informazioni sulla cronologia dei suggerimenti indicano quali suggerimenti sono stati forniti da ciascuna origine.
Rilevamento automatico del fuso orario
Questa sezione fornisce una panoramica del servizio time_zone_detector
che gestisce il rilevamento automatico del fuso orario, i controlli utente nelle impostazioni, il rilevamento del fuso orario della telefonia e della posizione e i dettagli dei test.
Il servizio time_zone_detector
Il servizio time_zone_detector
, presente sui dispositivi con Android 11 o versioni successive, gestisce il rilevamento automatico del fuso orario. Regola il fuso orario corrente del dispositivo secondo necessità quando è abilitato il rilevamento automatico del fuso orario.
Quando il rilevamento automatico del fuso orario è abilitato, time_zone_detector
può trovarsi in uno dei due stati: incerto e certo .
Quando il servizio time_zone_detector
è in un determinato stato, significa che il servizio time_zone_detector
ha ricevuto informazioni complesse sul fuso orario, che possono far sì che sovrascriva il fuso orario corrente. Quando è incerto, significa che non ha ricevuto informazioni o ha ricevuto solo informazioni poco attendibili, il che significa che non sovrascriverà il fuso orario corrente.
Alcuni stati del servizio time_zone_detector
possono includere quelli in cui time_zone_detector
non ha informazioni sul fuso orario da utilizzare o dove ha più fusi orari tra cui scegliere. Questi stati sono i seguenti:
- Si entra in un determinato stato con zero fusi orari quando il dispositivo si trova in un luogo senza fuso orario, ad esempio in acque internazionali o in un'area contesa. Questo stato è simile a uno stato incerto, ma indica che
time_zone_detector
non necessita di intraprendere ulteriori azioni per provare a determinare il fuso orario. - Viene inserito un determinato stato con più fusi orari in cui sono presenti ambiguità o condizioni di confine. In questo stato, se il fuso orario corrente è uno dei fusi orari di cui
time_zone_detector
è certo, il fuso orario corrente viene lasciato così com'è. Altrimenti verrà utilizzato uno dei fusi orari disponibili. Ciò conferiscetime_zone_detector
un elemento di persistenza se l'utente ha selezionato manualmente il proprio fuso orario in precedenza o quando il dispositivo si avvicina a un confine.
Lo stato certo o incerto del servizio time_zone_detector
è determinato dai suggerimenti sul fuso orario inviati da un algoritmo .
Generalmente, i suggerimenti sono di due tipi che corrispondono strettamente ai possibili stati di time_zone_detector
: certain e aware . Di seguito sono riportati esempi di tipi di suggerimenti:
tipo =
uncertain
,zoneIds = []
- L'algoritmo non sa qual è il fuso orario.
type =
certain
,zoneIds = ["Europe/London"]
- L'algoritmo è certo che la zona sia Europa/Londra.
tipo =
certain
,zoneIds = []
`- L'algoritmo è certo, ma non esiste alcun ID di zona associato alla posizione corrente.
tipo =
certain
,zoneIds = ["America/Denver", "America/Phoenix"]
- L'algoritmo è certo che la risposta sia una delle due zone, ma non può scegliere tra "America/Denver" e "America/Phoenix".
Il servizio time_zone_detector
tratta le sequenze di suggerimenti come distinte in base al loro algoritmo. A seconda dell'algoritmo, i suggerimenti potrebbero contenere anche metadati che indicano quanto sia sicuro l'algoritmo.
Il servizio time_zone_detector
è stateful, il che significa che tiene traccia dei suggerimenti più recenti forniti da ciascun algoritmo. Nuovi suggerimenti vengono inviati al servizio time_zone_detector
se un suggerimento precedente non è più corretto; cioè se un algoritmo ora ha un suggerimento diverso o se ha perso la capacità di rilevare il fuso orario. Il servizio time_zone_detector
rivaluta i suggerimenti nuovi ed esistenti e aggiorna lo stato del dispositivo quando vengono ricevuti suggerimenti.
Android supporta due algoritmi per il rilevamento del fuso orario:
- Telefonia
- Posizione
Il servizio time_zone_detector
utilizza in genere un singolo algoritmo per determinare il fuso orario. Quando l'algoritmo di posizione è supportato su un dispositivo, l'algoritmo utilizzato dal dispositivo viene determinato in base alle impostazioni del fuso orario configurate dall'utente. Quando l'algoritmo in uso diventa incerto riguardo al fuso orario, time_zone_detector
in genere non utilizza i suggerimenti di un algoritmo diverso. I suggerimenti associati ad algoritmi che non sono in uso possono essere conservati in memoria da time_zone_detector
, ma non vengono utilizzati a meno che l'algoritmo non cambi. Quando l'utente modifica le impostazioni per il rilevamento automatico del fuso orario e l'algoritmo cambia, viene utilizzato il suggerimento più recente disponibile per il nuovo algoritmo.
Per dettagli sulla situazione in cui vengono utilizzati più algoritmi per determinare il fuso orario, vedere Modalità fallback telefonia .
Modalità fallback della telefonia
Sui dispositivi con Android 13 e versioni successive, il servizio time_zone_detector
supporta la modalità fallback della telefonia . Questa modalità consente ad Android di utilizzare temporaneamente i suggerimenti di rilevamento della telefonia in situazioni in cui il rilevamento della posizione non è in grado di rilevare il fuso orario o in cui il rilevamento della posizione impiega più tempo per rilevare il fuso orario rispetto al rilevamento della telefonia.
La modalità fallback della telefonia si applica ai dispositivi in cui sono supportati sia la telefonia che il rilevamento della posizione e in cui l'utente ha abilitato Utilizza posizione per impostare il fuso orario nelle Impostazioni fuso orario . La modalità viene abilitata automaticamente quando un dispositivo viene riavviato e quando la modalità aereo è disabilitata.
In Android 14 e versioni successive, il fallback della telefonia può essere attivato tramite le API di reporting dello stato LTZP , ovvero se un LTZP segnala di essere incerto e la sua capacità di rilevare la posizione o il fuso orario è ridotta dal suo ambiente, viene attivata la modalità fallback della telefonia.
In modalità fallback della telefonia, il servizio time_zone_detector
utilizza i suggerimenti di telefonia come se il rilevamento della posizione fosse disabilitato finché l'algoritmo di posizione non fornisce un determinato suggerimento. Dopo aver ricevuto un determinato suggerimento, la modalità fallback della telefonia viene disattivata e vengono utilizzati esclusivamente i suggerimenti sulla posizione.
Per i dettagli di configurazione per la modalità fallback della telefonia, vedere Configurazione del rilevamento del fuso orario .
Impostazioni del fuso orario
Gli utenti possono abilitare e configurare le impostazioni per il rilevamento automatico del fuso orario nell'app Impostazioni AOSP.
Figura 2. Rilevamento automatico del fuso orario in Impostazioni.
La tabella seguente descrive i controlli utente per il rilevamento del fuso orario nell'app Impostazioni AOSP.
*Su Android 11 e versioni precedenti, questa impostazione è denominata Utilizza fuso orario fornito dalla rete | |||
Posizione delle impostazioni AOSP | Nome delle impostazioni AOSP | Scopo | Comportamento |
---|---|---|---|
Sistema > Data e ora | Imposta automaticamente il fuso orario* | Tutti gli utenti | Un interruttore. Quando è attivo , il dispositivo è responsabile del rilevamento del fuso orario corrente. Quando è disattivato , agli utenti vengono forniti i controlli per impostare manualmente il fuso orario del dispositivo. |
Sistema > Data e ora | Utilizza la posizione per impostare il fuso orario | Utente attuale | Un interruttore. Disponibile da Android 12. Questa opzione viene visualizzata solo quando il rilevamento del fuso orario della posizione è supportato sul dispositivo. Per le modifiche introdotte nella sezione 14, vedere Dispositivi che supportano solo il rilevamento del fuso orario della posizione . |
Posizione | Usa la posizione | Utente attuale | Un interruttore. Consente o impedisce l'utilizzo della posizione del dispositivo in generale. Il valore è rilevante se il rilevamento del fuso orario della posizione è supportato sul dispositivo. |
Di seguito viene fornita una panoramica del comportamento del dispositivo per il rilevamento del fuso orario in base alle impostazioni scelte dall'utente:
[Data e ora] Imposta automaticamente il fuso orario: OFF
- L'utente deve selezionare manualmente il fuso orario.
[Data e ora] Imposta automaticamente il fuso orario: ON
[Posizione] Usa posizione: OFF
- I segnali di telefonia vengono utilizzati per rilevare il fuso orario.
[Posizione] Usa posizione: ON
[Data e ora] Usa la posizione per impostare il fuso orario: ON
- La posizione viene utilizzata per rilevare il fuso orario.
[Data e ora] Usa la posizione per impostare il fuso orario: OFF
- I segnali di telefonia vengono utilizzati per rilevare il fuso orario.
Dispositivi per più utenti
Poiché molte delle impostazioni coinvolte riguardano l'utente corrente, il comportamento di rilevamento del fuso orario di un dispositivo può cambiare quando l'utente corrente cambia su un dispositivo Android multiutente.
L'interruttore Usa la posizione per impostare il fuso orario è limitato all'utente corrente e non è limitato dai criteri del dispositivo, il che significa che gli utenti possono sempre modificarne il valore, anche quando l' interruttore Imposta automaticamente il fuso orario è disattivato o se altri controlli relativi all'ora o al fuso orario sono limitati dal Device Policy Controller.
Dispositivi che supportano solo l'algoritmo di rilevamento del fuso orario della posizione
Questa sezione descrive il comportamento dei dispositivi che supportano solo l'algoritmo di localizzazione.
Android 14 e versioni successive
- L'opzione Usa posizione non viene mostrata agli utenti nell'app Impostazioni AOSP e il dispositivo si comporta come se l'opzione Usa posizione fosse abilitata.
- Il valore dell'impostazione
SettingsProvider
con ambito utentelocation_time_zone_detection_enabled
viene ignorato. Questo valore registra la preferenza dell'utente su altri tipi di dispositivi.
Android 12 o Android 13
- L'opzione Usa posizione è visibile agli utenti nell'app Impostazioni AOSP e gli utenti possono disabilitare l'opzione. Se l'opzione è disabilitata, il dispositivo non rileverà automaticamente il fuso orario.
Comportamento durante il passaggio da e verso il rilevamento automatico
Quando l'utente cambia il rilevamento del fuso orario da manuale ad automatico , time_zone_detector
potrebbe già essere certo del fuso orario corrente. In tal caso, poiché l'utente abilita il rilevamento automatico, il fuso orario del dispositivo potrebbe essere modificato contemporaneamente per corrispondere all'opinione del servizio time_zone_detector
.
Allo stesso modo, quando l'utente apporta una modifica nelle Impostazioni che comporta una modifica all'algoritmo corrente del servizio time_zone_detector
, time_zone_detector
potrebbe già aver ricevuto suggerimenti per il nuovo algoritmo e quindi l'ora del dispositivo potrebbe essere modificata per corrispondere immediatamente all'opinione del servizio time_zone_detector
.
Rilevamento fuso orario telefonia
Il rilevamento del fuso orario della telefonia utilizza i segnali della telefonia per determinare il fuso orario corrente. Per ulteriori informazioni, vedere Rilevamento del fuso orario della telefonia .
Rilevamento del fuso orario della posizione
Il rilevamento del fuso orario della posizione è disponibile su Android 12 o versioni successive. È una funzionalità opzionale di rilevamento automatico del fuso orario che consente ai dispositivi di utilizzare la propria posizione per determinare il fuso orario corrente.
Il servizio location_time_zone_manager
, introdotto in Android 12, viene eseguito nel server di sistema e contiene il codice responsabile dell'invio dei suggerimenti dell'algoritmo di localizzazione al servizio time_zone_detector
. Per ulteriori informazioni, consulta Rilevamento del fuso orario della posizione .
Considerazioni sull'adozione delle funzionalità
Questa sezione descrive gli aspetti della funzionalità di rilevamento del fuso orario della posizione per aiutare il produttore del dispositivo a determinare se adottare la funzionalità su un dispositivo.
Confronto tra telefonia e rilevamento della posizione
La tabella seguente fornisce un confronto tra i vantaggi e gli svantaggi dell'utilizzo dei segnali di posizione anziché di telefonia per il rilevamento del fuso orario.
Rilevamento della telefonia | Rilevamento della posizione | |
---|---|---|
Correttezza | Varia in base al paese. Dipende dalla correttezza e dalla disponibilità del MCC, del NITZ. | Dipende dalla configurazione della funzionalità o dai componenti plug-in. La correttezza varia tipicamente in base a:
|
Aggiornabilità | Il rilevamento della telefonia si basa sui file contenuti nel modulo aggiornabile Time Zone Data (com.android.tzdata APEX). | Dipende dalla configurazione della funzionalità o dai componenti plug-in. L'aggiornabilità dipende in genere dal fatto che il dispositivo utilizzi i dati della mappa del fuso orario del server o del client. Nota: i dati della mappa del fuso orario non sono contenuti nel modulo Dati del fuso orario utilizzato per aggiornare la copia di Android di TZDB e altre informazioni sul fuso orario. I produttori di dispositivi devono anche considerare la coerenza della versione tra le regole del fuso orario e i dati della mappa del fuso orario. |
Il consumo di energia | Nessuno o consumo energetico basso | Dipende dalle impostazioni di posizione dell'utente, dai plug-in utilizzati e in genere da quali altre app richiedono la posizione. |
Disponibilità | Solo dispositivi di telefonia. Di solito richiede una SIM funzionante. | Il rilevamento della posizione dipende dai provider di posizione disponibili. |
Privacy dell'utente
Il fuso orario preferito di un utente è generalmente determinato dalla sua posizione geografica. La posizione è un dato sensibile. Gli utenti potrebbero essere preoccupati se la conoscenza della loro posizione viene condivisa come parte del rilevamento del fuso orario. Non correlate al rilevamento del fuso orario, tutte le app in esecuzione su un dispositivo possono leggere il fuso orario corrente del dispositivo senza richiedere un'autorizzazione Android e le app possono dedurre un'idea imprecisa della posizione del dispositivo da queste informazioni.
Più specificamente, il rilevamento del fuso orario può funzionare con mezzi passivi o attivi:
- Passivo: qualcosa nell'ambiente del dispositivo indica al dispositivo il fuso orario da utilizzare in quell'ambiente.
- Attivo: il dispositivo deve calcolare da solo il fuso orario e, a seconda delle impostazioni sulla privacy degli utenti e del loro consenso, ottiene la posizione del dispositivo per farlo. Può quindi condividere la sua posizione con servizi esterni. Consulta la discussione di seguito per i dettagli sulla privacy e sul consenso dell'utente.
Il rilevamento passivo, come nel caso dell'algoritmo di telefonia, non ha ulteriori implicazioni sulla privacy degli utenti.
Il rilevamento attivo, come con l'algoritmo di localizzazione, implica la determinazione della posizione del dispositivo, che gli utenti potrebbero non voler accettare, e la posizione potrebbe essere inviata su una rete per determinare l'ID del fuso orario.
L'approccio di Android alla privacy dell'utente per il rilevamento del fuso orario offre all'utente la possibilità di disabilitare individualmente gli algoritmi che dovrebbero essere attivi. Inoltre, il codice della piattaforma AOSP non si occupa direttamente della posizione stessa: il rilevamento della posizione e la mappatura della posizione sugli ID del fuso orario sono lasciati ai componenti plug-in configurati dai produttori dei dispositivi.
Per ulteriori dettagli sulle funzionalità di privacy dell'utente, vedere Rilevamento del fuso orario della posizione .
Configurazione
I produttori di dispositivi possono configurare il servizio time_zone_detector
per modificarne il comportamento. Questa sezione descrive le opzioni di configurazione per il comportamento generale del servizio time_zone_detector
. Per i dettagli sulla configurazione degli algoritmi di rilevamento del fuso orario e della telefonia, vedere Rilevamento del fuso orario della telefonia e Rilevamento del fuso orario della posizione .
La configurazione AOSP di base si trova in frameworks/base/core/res/res/values/config.xml
.
Chiave di configurazione | Valore AOSP | Descrizione |
---|---|---|
config_supportTelephonyTimeZoneFallback | true | Se true , time_zone_detector utilizza la modalità fallback della telefonia. Questo è disponibile per Android 13 e versioni successive. |
Alterazione del comportamento predefinito del dispositivo
In AOSP, il rilevamento automatico del fuso orario è abilitato per impostazione predefinita con l'impostazione auto_time_zone
impostata su true
. Per disabilitare il rilevamento automatico dell'ora per impostazione predefinita, impostare il valore di def_auto_time_zone
definito in frameworks/base/packages/SettingsProvider/res/values/defaults.xml
su false
.
Quando si ripristina un backup da un altro dispositivo, il framework aggiorna il valore dell'impostazione auto_time_zone
per impostazione predefinita. Se vuoi assicurarti che questa impostazione non venga ripristinata da un backup, includi auto_time_zone
nell'array restore_blocked_global_settings
definito in frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml
.
Debug e test del fuso orario
Questa sezione fornisce informazioni su come eseguire il debug e testare il comportamento del servizio time_zone_detector
e di altri componenti condivisi da tutti gli algoritmi.
Configurazione di un dispositivo utilizzando il servizio device_config
Il servizio device_config
è un meccanismo utilizzato su Android per configurare un comportamento modificabile utilizzando valori che in genere vengono estratti da un server remoto tramite codice proprietario (non AOSP). Quando si utilizzano i valori device_config
per il test, soprattutto durante test manuali di lunga durata, il dispositivo potrebbe sincronizzare i flag, reimpostando i flag e cancellando i valori impostati per il test.
In Android 12 o versioni successive, per impedire temporaneamente la sincronizzazione dei flag, utilizzare:
adb shell cmd device_config set_sync_disabled_for_tests persistent
Per ripristinare la sincronizzazione dei flag dopo i test, utilizzare:
adb shell cmd device_config set_sync_disabled_for_tests none
Dopo aver ripristinato la sincronizzazione dei flag, riavviare il dispositivo.
Per ulteriori informazioni, utilizzare $ adb shell cmd device_config help
.
Interazione con il servizio time_zone_detector
Per visualizzare la configurazione time_zone_detector
e lo stato del servizio time_zone_detector
, utilizzare:
adb shell cmd time_zone_detector dump
Per visualizzare comandi aggiuntivi per il debug e il test del rilevamento del fuso orario, utilizzare:
adb shell cmd time_zone_detector help
L'output della guida descrive inoltre le proprietà del servizio device_config
che possono essere utilizzate per influenzare il comportamento del servizio time_zone_detector
per il test o in produzione. Per i dettagli, vedere Configurazione di un dispositivo utilizzando il servizio device_config .
Per convalidare il rilevamento del fuso orario, i tester devono essere consapevoli dell'algoritmo utilizzato da time_zone_detector
. Per comprendere e influenzare l'algoritmo corrente di time_zone_detector
, utilizzare una delle seguenti opzioni:
- Controlla visivamente tramite l'interfaccia utente delle Impostazioni. Per ulteriori informazioni, consulta Impostazioni del fuso orario .
Utilizza la riga di comando tramite adb:
- Per eseguire il dump dello stato
time_zone_detector
, utilizzareadb shell cmd time_zone_detector dump
- Per modificare le impostazioni del dispositivo, utilizzare altri comandi
time_zone_detector
. Per ulteriori informazioni, utilizzareadb shell cmd time_zone_detector help
.
- Per eseguire il dump dello stato
Di seguito è riportato un esempio dell'output del comando adb shell cmd time_zone_detector dump
, con le informazioni sull'algoritmo corrente e sullo stato del servizio in grassetto:
$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
mEnvironment.getCurrentUserId()=0
mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
[Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
mEnvironment.isDeviceTimeZoneInitialized()=true
mEnvironment.getDeviceTimeZone()=Europe/London
Time zone change log:
Manual suggestion history:
...
Geolocation suggestion history:
...
Telephony suggestion history:
...
Le informazioni possono essere interpretate come segue:
Chiave | Valore |
---|---|
mUserConfigAllowed | Se all'utente viene impedito di controllare le impostazioni di data e ora dal controller dei criteri del dispositivo . |
mTelephonyDetectionSupported | Se il dispositivo dispone del rilevamento del fuso orario della telefonia. |
mGeoDetectionSupported | Se il dispositivo supporta il rilevamento del fuso orario della posizione. Questo è lo stato effettivo in base alla configurazione e alla presenza di almeno una ZTL. |
mAutoDetectionEnabled | Se è abilitato il rilevamento automatico del fuso orario. |
mLocationEnabled | L'interruttore della posizione principale. |
mGeoDetectionEnabled | Il cambio dell'algoritmo: false indica l'algoritmo di telefonia e true indica l'algoritmo di localizzazione. |
Le informazioni sulla cronologia dei suggerimenti indicano quali suggerimenti sono stati forniti tramite Impostazioni (manuale) e dagli algoritmi di telefonia e localizzazione.