Rilevamento del fuso orario in base alla posizione

Il rilevamento del fuso orario in base alla posizione, disponibile su Android 12 e versioni successive, è una funzionalità opzionale di rilevamento automatico del fuso orario che consente ai dispositivi di utilizzare la propria posizione e i dati della mappa del fuso orario per determinare il fuso orario.

Il rilevamento del fuso orario in base alla posizione è un meccanismo alternativo al rilevamento del fuso orario di telefonia. Poiché questa funzionalità non richiede la telefonia, può essere supportata su dispositivi di vari fattori di forma, oltre ai dispositivi di telefonia mobile.

La funzionalità di rilevamento del fuso orario in base alla posizione è costituita dai seguenti componenti nella piattaforma AOSP:

  • Logica di rilevamento del fuso orario nel server di sistema
  • Un'opzione accessibile agli utenti nelle Impostazioni, introdotta in Android 12, per consentire agli utenti di scegliere tra i meccanismi di rilevamento del fuso orario di telefonia e della posizione

  • Un sistema di plug-in per i componenti che eseguono il rilevamento della posizione e la mappatura del fuso orario. Il plug-in è chiamato Location Time Zone Provider (LTZP) e su un dispositivo possono essercene fino a due. La piattaforma fornisce API di sistema che devono essere utilizzate per implementare una zona di traffico a basse emissioni.

  • Un'implementazione di riferimento di LTZP.

  • Strumenti di hosting per generare un set di dati di riferimento dai dati di Open Street Map (OSM) che possono essere utilizzati con l'implementazione di riferimento.

Privacy degli utenti

Il rilevamento del fuso orario in base alla posizione include le seguenti funzionalità per la privacy degli utenti:

  • Quando è presente un pulsante di attivazione/disattivazione per selezionare l'algoritmo di localizzazione, gli utenti possono disattivarlo in qualsiasi momento.

  • I suggerimenti per il fuso orario derivati dalla posizione non vengono condivisi tra gli utenti di un dispositivo.

  • Gli utenti possono controllare il rilevamento della posizione per il rilevamento del fuso orario in modo esplicito tramite la schermata delle impostazioni Data e ora. Gli utenti non devono concedere esplicitamente l'autorizzazione tramite una finestra di dialogo delle autorizzazioni.

  • Le informazioni sulla posizione del dispositivo non vengono trasmesse ai servizi della piattaforma Android. Si verifica invece quanto segue:

    • I servizi di rilevamento del fuso orario ricevono gli ID fuso orario da LTZP, non dalla posizione del dispositivo. Si tratta dell'API minima necessaria per supportare il rilevamento del fuso orario in base alla posizione.
    • Gli integratori di sistemi controllano il funzionamento dei singoli LTZP. Le implementazioni LTZP possono utilizzare i dati della mappa del fuso orario memorizzati interamente sul dispositivo Android, utilizzare i server o utilizzare un approccio ibrido.

Comportamento della funzionalità

Il servizio time_zone_detector determina quando modificare il fuso orario attuale del dispositivo in base ai suggerimenti ricevuti dagli algoritmi di rilevamento.

Il servizio location_time_zone_manager è responsabile della generazione di suggerimenti per l'algoritmo di localizzazione di time_zone_detector. Il servizio location_time_zone_manager viene eseguito nel processo del server di sistema.

Il servizio location_time_zone_manager non contiene alcuna logica di rilevamento del fuso orario. Questo servizio è responsabile della gestione del ciclo di vita di uno o due plug-in LTZP.

Quando il rilevamento del fuso orario in base alla posizione non è necessario, i LTZP non vengono avviati. Ciò significa che il sistema di rilevamento del fuso orario in base alla posizione non chiede ai LTZP di monitorare la posizione del dispositivo, a meno che non sia esplicitamente richiesto. Alcuni dei motivi di questo comportamento includono:

  • A differenza dei segnali di telefonia ricevuti passivamente nell'ambito delle normali operazioni di telefonia, la posizione può essere richiesta attivamente ai fornitori di servizi di localizzazione Android e può consumare energia aggiuntiva.
  • Le impostazioni di geolocalizzazione sono specifiche per l'utente e Android deve rispettare le impostazioni dell'utente corrente.
  • L'ottenimento della posizione del dispositivo è sensibile alla privacy.

Inoltre, il servizio location_time_zone_manager fornisce un suggerimento incerto (se necessario) quando l'utente corrente modifica le impostazioni per evitare la condivisione delle informazioni sulla posizione tra gli utenti.

A seguito di queste scelte, occorrono alcuni secondi dopo il passaggio dall'algoritmo corrente alla posizione o dopo il cambio dell'utente corrente prima che il fuso orario possa essere rilevato. Ciò dipende anche dalle implementazioni delle zone a traffico limitato utilizzate.

L'implementazione del rilevamento del fuso orario in base alla posizione di AOSP consente fino a due LTZP, un LTZP primario e uno secondario, come definito qui:

primary LTZP
Viene eseguito in qualsiasi momento in cui l'utente ha consentito l'esecuzione della funzionalità di rilevamento del fuso orario.
LTZP secondario
Viene eseguito se il LTZP principale segnala che il fuso orario è incerto, segnala un errore permanente o si verifica un timeout durante l'inizializzazione. Si interrompe se il LTZP principale invia un suggerimento specifico.

Come mostrato nella Figura 1, il servizio time_zone_detector riceve suggerimenti sul fuso orario dall'algoritmo di telefonia o di localizzazione. L'algoritmo di localizzazione riceve suggerimenti dalla zona di transizione primaria o secondaria.

Flusso di informazioni sul rilevamento del fuso orario in base alla posizione

Figura 1. Flusso di informazioni per il rilevamento del fuso orario in base alla posizione.

Requisiti di configurazione del dispositivo

Per supportare la funzionalità del fuso orario della posizione, i dispositivi devono essere configurati con LTZP che il dispositivo può utilizzare. Perché il rilevamento del fuso orario in base alla posizione sia funzionante e visibile agli utenti nelle Impostazioni, è necessario che almeno un LTZP sia attivato e configurato sui dispositivi.

Configurazione dispositivo

Questa sezione descrive come i produttori di dispositivi possono configurare i dispositivi per supportare il 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_enableGeolocationTimeZoneDetection true Questo è il controllo principale per la funzionalità di rilevamento del fuso orario in base alla posizione.

La funzionalità è supportata per impostazione predefinita in AOSP. Perché la funzionalità sia disponibile per gli utenti, deve essere abilitata o configurata almeno una zona di transizione a bassa emissione.

Se il valore è impostato su false, la funzionalità viene disattivata completamente per un piccolo risparmio di memoria.
config_enablePrimaryLocationTimeZoneProvider false In questo modo viene abilitato il LTZP principale.
config_primaryLocationTimeZoneProviderPackageName Imposta questo valore sul nome del pacchetto dell'app in cui è possibile trovare il servizio del fornitore principale.
config_enableSecondaryLocationTimeZoneProvider false In questo modo viene attivata la zona di transizione a bassa velocità secondaria.
config_secondaryLocationTimeZoneProviderPackageName Imposta questo valore sul nome del pacchetto dell'app in cui è possibile trovare il servizio del fornitore secondario.

Per impostazione predefinita, la configurazione AOSP ha la chiave config_enableGeolocationTimeZoneDetection impostata su true, il che consente il supporto della funzionalità di rilevamento del fuso orario in base alla posizione. Inizialmente, la funzionalità non è visibile agli utenti perché AOSP non include una configurazione LTZP per impostazione predefinita. Tuttavia, utilizzando questa configurazione predefinita, i produttori di dispositivi possono abilitare e simulare le zone protette con accesso limitato dalla riga di comando per i test. Per ulteriori informazioni, consulta la sezione Debug e test.

API di stato LTZP

In Android 14, le API LTZP supportano le informazioni sullo stato dei report LTZP. In questo modo, l'LTZP può segnalare problemi che la piattaforma potrebbe non essere in grado di rilevare autonomamente, poiché i componenti di rilevamento del fuso orario della piattaforma non sono direttamente coinvolti nel rilevamento della posizione o del fuso orario nell'algoritmo di localizzazione.

La possibilità di segnalare che il comportamento del LTZP è stato degradato dall'ambiente del dispositivo è utile quando è supportata la modalità di fallback della telefonia. Ad esempio, se un LTZP di terze parti che si basa su impostazioni o autorizzazioni personalizzate per il funzionamento del rilevamento della posizione è in esecuzione in modalità degradata o è disattivato dalle impostazioni del dispositivo corrente, l'LTZP può segnalare queste informazioni sullo stato ai componenti della piattaforma interni, come l'app Impostazioni, tramite il metodo reportSuggestion. L'app Impostazioni può quindi notificare agli utenti tramite stringhe personalizzabili o personalizzazioni che ci sono impostazioni che devono essere modificate affinché l'algoritmo di localizzazione funzioni correttamente o non funzioni affatto.

Per ulteriori informazioni sugli stati che il LTZP può segnalare, vedi TimeZoneProviderStatus.

Configurazione e deployment di LTZP

Quando configuri un LTZP, leggi le istruzioni nel codice sorgente per frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java. I commenti Javadoc forniscono dettagli sul servizio, sulle autorizzazioni necessarie e su altre configurazioni.

Per configurare un LTZP, i produttori di dispositivi devono scegliere un processo dell'app per ospitare il servizio LTZP. Avere un processo dedicato per un LTZP comporta un overhead elevato; idealmente, il processo dell'app scelto è uno che viene eseguito in modo continuo, ad esempio il server di sistema.

Sui dispositivi con componenti di sistema modulari (moduli), considera l'interazione tra i dati geografici utilizzati da LTZP e le regole del fuso orario (tzdb) contenute nel modulo Dati del fuso orario (com.android.tzdata). Gli aggiornamenti a uno senza aggiornamenti all'altro probabilmente causano problemi di discrepanza di versione. Per ulteriori informazioni, consulta Considerazioni sull'adozione delle funzionalità.

AOSP reference LTZP

AOSP contiene un'implementazione di riferimento di LTZP in packages/modules/GeoTZ. Questa implementazione di riferimento utilizza le API AOSP per determinare la posizione del dispositivo e utilizza un file di dati sul dispositivo per mappare la posizione a un insieme di ID fuso orario.

Il codice sorgente include un set di dati di riferimento derivato da altri progetti open source. Per maggiori dettagli, vedi README.md e i vari file LICENSE.

Debug e test

La sezione seguente descrive i comandi della shell per il debug e il test della funzionalità di rilevamento del fuso orario della località.

Interagire con il servizio location_time_zone_manager

Quando l'algoritmo di localizzazione è supportato su un dispositivo con Android 12 e versioni successive, Android crea un'istanza del servizio location_time_zone_manager all'avvio.

Per eseguire il dump dello stato attuale di location_time_zone_manager, utilizza:

adb shell cmd location_time_zone_manager dump

Per visualizzare un ampio set di opzioni della riga di comando per facilitare i test, utilizza:

adb shell cmd location_time_zone_manager help

L'output della guida descrive anche le proprietà del servizio device_config che possono essere utilizzate per influire sul comportamento di time_zone_detector per i test o in produzione. Per ulteriori informazioni, consulta Configurare un dispositivo utilizzando il servizio device_config.

Le implementazioni LTZP possono fornire il proprio supporto per il debug o i test. Ad esempio, puoi utilizzare il seguente comando per eseguire il debug di LTZP di riferimento AOSP quando è registrato nel processo del server di sistema:

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService