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à facoltativa di rilevamento automatico del fuso orario che consente ai dispositivi di utilizzare i dati relativi alla posizione e alla 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 per la telefonia. Poiché questa funzionalità non richiede la telefonia, può essere supportata su dispositivi con diversi fattori di forma, oltre che su quelli di telefonia mobile.

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

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

  • Un sistema di plug-in per i componenti che eseguono il rilevamento della posizione e la mappatura dei fusi orari. Il plug-in è chiamato Fornitore del fuso orario della posizione (LTZP) e su un dispositivo possono essere presenti fino a due plug-in. La piattaforma fornisce API di sistema che devono essere utilizzate per implementare una LTZP.

  • Un'implementazione di LTZP di riferimento.

  • Strumenti di hosting per generare un set di dati di riferimento dai dati 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 dell'utente:

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

  • I suggerimenti per i fusi orari ricavati dalla posizione non vengono condivisi tra gli utenti su un dispositivo.

  • Gli utenti possono controllare il rilevamento della posizione per il rilevamento del fuso orario esplicitamente tramite la schermata Impostazioni Data e ora. Gli utenti non devono grantare esplicitamente l'autorizzazione tramite una finestra di dialogo di autorizzazione.

  • I dati sulla posizione del dispositivo non vengono trasmessi ai servizi della piattaforma Android. Si verifica invece quanto segue:

    • Ai servizi di rilevamento del fuso orario vengono inviati gli ID fuso orario dalla LTZP, non la posizione del dispositivo. Questa è l'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 delle mappe dei fusi orari 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 corrente 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 geolocalizzazione 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 fuso orari locali 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 espressamente richiesto. Ecco alcuni dei motivi di questo comportamento:

  • A differenza dei segnali di telefonia che vengono ricevuti passivamente nell'ambito delle normali operazioni di telefonia, la posizione può essere richiesta attivamente ai provider di geolocalizzazione Android e può consumare ulteriore energia.
  • Le impostazioni di geolocalizzazione sono basate sugli utenti 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 di condividere informazioni sulla posizione tra gli utenti.

A causa di queste scelte, sono necessari alcuni secondi dopo aver impostato l'algoritmo corrente sulla posizione o dopo aver cambiato l'utente corrente prima che il fuso orario possa essere rilevato. Ciò dipende anche dalle implementazioni delle LTP impiegate.

L'implementazione del rilevamento del fuso orario in base alla posizione di AOSP consente fino a due fusi orari locali principali e secondari, come definito qui:

LTZP principale
Verrà eseguita in qualsiasi momento se l'utente ha consentito l'esecuzione della funzionalità di rilevamento del fuso orario in base alla posizione.
LTZP secondario
Verrà eseguito se il fuso orario principale segnala che il fuso orario è incerto, segnala un errore permanente o scade durante l'inizializzazione. Si interrompe se l'LTZP principale invia un determinato suggerimento.

Come mostrato nella Figura 1, il servizio time_zone_detector riceve suggerimenti per i fusi orari dall'algoritmo di telefonia o posizione. L'algoritmo di geolocalizzazione riceve suggerimenti dall'LTPZ principale o secondario.

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

Figura 1. Flusso di informazioni sul 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 i fuso orari locali che possono utilizzare. Per il rilevamento del fuso orario della posizione, i dispositivi richiedono almeno un fuso orario personalizzato abilitato e configurato per essere visibile agli utenti nelle Impostazioni.

Configurazione dispositivo

Questa sezione descrive in che modo i produttori di dispositivi possono configurare i dispositivi in modo che supportino il rilevamento del fuso orario in base alla 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. Affinché la funzionalità sia disponibile per gli utenti, è necessario attivare o configurare almeno un LTZP.

Se imposti il valore su false, la funzionalità viene disattivata completamente per un piccolo risparmio di memoria.
config_enablePrimaryLocationTimeZoneProvider false In questo modo viene attivato il LTZP principale.
config_primaryLocationTimeZoneProviderPackageName Imposta il nome del pacchetto dell'app in cui è possibile trovare il servizio del fornitore principale.
config_enableSecondaryLocationTimeZoneProvider false In questo modo viene attivato il LTZP secondario.
config_secondaryLocationTimeZoneProviderPackageName Imposta questo valore sul nome del pacchetto dell'app in cui è disponibile il servizio del fornitore secondario.

Per impostazione predefinita, la configurazione AOSP ha la chiave config_enableGeolocationTimeZoneDetection impostata su true, attivando il supporto per la funzionalità di rilevamento del fuso orario in base alla posizione. La funzionalità non è inizialmente visibile agli utenti perché AOSP non include una configurazione LTZP per impostazione predefinita. Tuttavia, con questa configurazione predefinita, i produttori di dispositivi possono attivare e simulare i LTZP dalla riga di comando per i test. Per maggiori informazioni, consulta Debug e test.

API di stato LTZP

In Android 14, le API LTZP supportano le informazioni sullo stato dei report LTZP. In questo modo, la LTZP può segnalare i 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 della posizione.

La possibilità di segnalare che il comportamento del LTZP è stato degradato dall'ambiente del dispositivo è utile quando è supportata la modalità di riserva per la telefonia. Ad esempio, se un LTZP di terze parti che si basa su impostazioni o autorizzazioni personalizzate per il rilevamento della posizione è in esecuzione in modalità degradata o è disattivato dalle impostazioni correnti del dispositivo, l'LTZP può segnalare queste informazioni di stato ai componenti della piattaforma interna, come l'app Impostazioni, tramite il metodo reportSuggestion. L'app Impostazioni può quindi informare gli utenti tramite stringhe o personalizzazioni personalizzabili che esistono impostazioni che devono essere modificate affinché l'algoritmo di geolocalizzazione funzioni correttamente o addirittura.

Per ulteriori informazioni sugli stati che possono essere segnalati dal LTZP, consulta TimeZoneProviderStatus.

Configurazione e implementazione 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 altra configurazione.

Per configurare un LTZP, i produttori di dispositivi devono scegliere un processo di app per ospitare il servizio del LTZP. Avere un processo dedicato per una LTZP è un overhead elevato. Idealmente, il processo scelto per l'app è quello in esecuzione sempre, come il server di sistema.

Sui dispositivi con componenti di sistema modulari (moduli), considera l'interazione tra i dati geografici utilizzati dalla piattaforma LTZP e le regole per il fuso orario (tzdb) riportate nel modulo Dati del fuso orario (com.android.tzdata). Gli aggiornamenti a uno senza aggiornamenti all'altro potrebbero causare problemi di disallineamento delle versioni. Per ulteriori informazioni, consulta Considerazioni sull'adozione delle funzionalità.

Riferimento AOSP LTZP

AOSP contiene un'implementazione LTZP di riferimento in packages/modules/GeoTZ. Questa implementazione di riferimento utilizza le API AOSP per determinare la posizione del dispositivo e 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, consulta README.md e i vari file LICENSE.

Debug e test

La sezione seguente descrive i comandi 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 geolocalizzazione è supportato su un dispositivo con Android 12 e versioni successive, Android crea un'istanza del servizio location_time_zone_manager al momento dell'avvio.

Per eseguire il dump dello stato corrente 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 il test, usa:

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 del LTZP di riferimento AOSP quando è registrato nel processo del server di sistema:

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