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 i dati della mappa di posizione e fuso orario per determinare il fuso orario.

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

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

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

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

  • Un'implementazione LTZP di riferimento.

  • Strumenti host per generare un set di dati di riferimento dai dati OpenStreetMap che può essere utilizzato con l'implementazione di riferimento.

Privacy dell'utente

Il rilevamento del fuso orario della posizione include le seguenti funzionalità di privacy dell'utente:

  • Quando è presente un interruttore per selezionare l'algoritmo di localizzazione, gli utenti possono disattivare l'algoritmo di localizzazione in qualsiasi momento.

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

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

  • Le informazioni sulla posizione del dispositivo non vengono passate ai servizi della piattaforma Android. Accade invece quanto segue:

    • Ai servizi di rilevamento del fuso orario vengono inviati gli ID del fuso orario solo da ZTL, non dalla posizione del dispositivo. Questa è l'API minima necessaria per supportare il rilevamento del fuso orario della posizione.
    • Il funzionamento delle singole ZTL è lasciato alla decisione degli integratori di sistema. Le implementazioni LTZP possono utilizzare i dati della mappa del fuso orario conservati interamente sul dispositivo Android, sfruttare i server o utilizzare un approccio ibrido.

Comportamento delle funzionalità

Il servizio time_zone_detector determina quando modificare il fuso orario corrente del dispositivo in base ai suggerimenti che riceve 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. È responsabile della gestione del ciclo di vita di uno o due plug-in chiamati Location Time Zone Providers (LTZP).

Quando il rilevamento del fuso orario della posizione non è necessario, gli ZTL non vengono avviati. Ciò significa che il sistema di rilevamento del fuso orario della posizione non chiede agli ZTL di tracciare la posizione del dispositivo a meno che non siano esplicitamente richiesti. Alcuni dei motivi di questo comportamento includono quanto segue:

  • A differenza dei segnali di telefonia che vengono ricevuti passivamente come parte delle normali operazioni di telefonia, la posizione può essere richiesta attivamente ai provider di localizzazione Android e potrebbe consumare energia aggiuntiva.
  • Le impostazioni di posizione riguardano l'utente e Android deve rispettare le impostazioni dell'utente corrente.
  • Ottenere la posizione del dispositivo è sensibile alla privacy.

Inoltre, il servizio location_time_zone_manager fornisce un suggerimento incerto (se necessario) quando l'utente corrente cambia per evitare di condividere le informazioni sulla posizione tra gli utenti.

Come risultato di queste scelte, in genere sono necessari 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 ZTL utilizzate.

L'implementazione del rilevamento del fuso orario della posizione AOSP consente fino a due ZTL, uno ZTL primario e uno secondario come definito qui:

ZTL primaria
Viene eseguito in ogni momento quando l'utente ha consentito l'esecuzione della funzionalità di rilevamento del fuso orario della posizione.
ZTL secondaria
Viene eseguito se il LTZP primario segnala che il fuso orario è incerto , segnala un errore permanente o va in timeout durante l'inizializzazione. Si ferma se la ZTL primaria invia un determinato suggerimento.

Come mostrato nella Figura 1, i servizi time_zone_detector ricevono suggerimenti sul fuso orario dall'algoritmo di telefonia o di localizzazione. L'algoritmo di localizzazione riceve suggerimenti dalla ZTL primaria o secondaria.

Flusso di informazioni sul rilevamento del fuso orario della posizione

Figura 1. Flusso di informazioni sul rilevamento del fuso orario della posizione.

Requisiti di configurazione del dispositivo

Per supportare la funzionalità del fuso orario della posizione, i dispositivi devono essere configurati con ZTL che il dispositivo può utilizzare. I dispositivi richiedono che almeno un ZTL sia abilitato e configurato affinché il rilevamento del fuso orario della posizione sia funzionale e visibile agli utenti in Impostazioni.

Configurazione del 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 è in frameworks/base/core/res/res/values/config.xml :

Chiave di configurazione Valore AOSP Descrizione
config_enableGeolocationTimeZoneDetection true Questo è il controllo principale per la funzione di rilevamento del fuso orario della posizione.

La funzionalità è supportata per impostazione predefinita in AOSP. Affinché la funzionalità sia disponibile agli utenti, è necessario abilitare o configurare almeno un ZTL.

L'impostazione del valore su false disabilita completamente la funzionalità per un piccolo risparmio di memoria.
config_enablePrimaryLocationTimeZoneProvider false Ciò abilita la ZTL primaria.
config_primaryLocationTimeZoneProviderPackageName Impostalo sul nome del pacchetto dell'app in cui è possibile trovare il servizio del fornitore principale.
config_enableSecondaryLocationTimeZoneProvider false Ciò abilita la ZTL secondaria.
config_secondaryLocationTimeZoneProviderPackageName Impostalo 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 , abilitando il supporto per la funzionalità di rilevamento del fuso orario della posizione. La funzionalità inizialmente 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 ZTL dalla riga di comando per i test. (Per ulteriori informazioni, vedere Debug e test .)

API di stato LTZP

In Android 14, le API LTZP supportano le informazioni sullo stato dei report LTZP. Ciò consente alla ZTL di segnalare problemi che la piattaforma potrebbe non essere in grado di rilevare da sola, 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 della ZTL è stato peggiorato dall'ambiente del dispositivo è utile quando è supportata la modalità fallback della telefonia . Ad esempio, se una ZTL di terze parti che si basa su impostazioni personalizzate o autorizzazioni per il funzionamento del rilevamento della posizione è in esecuzione in modalità degradata o disabilitata dalle impostazioni correnti del dispositivo, può segnalare queste informazioni sullo stato ai componenti interni della piattaforma come l'app Impostazioni attraverso il metodo reportSuggestion . L'app Impostazioni può quindi avvisare gli utenti tramite stringhe o personalizzazioni personalizzabili che ci sono impostazioni che devono essere modificate affinché l'algoritmo di localizzazione funzioni bene o non funzioni affatto.

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

Configurazione e distribuzione del provider del fuso orario della posizione

Quando si configura un LTZP, leggere 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 provider di fuso orario di posizione, i produttori di dispositivi devono scegliere un processo dell'app per ospitare il servizio LTZP. Avere un processo dedicato per una ZTL rappresenta un sovraccarico elevato; idealmente, il processo dell'app scelto è quello che è sempre in esecuzione, come il server di sistema.

Sui dispositivi con componenti di sistema modulari (moduli), considerare l'interazione tra i dati geografici utilizzati da ZTL e le regole del fuso orario (tzdb) trasportate nel modulo Dati fuso orario ( com.android.tzdata ). Gli aggiornamenti dell'uno senza aggiornamenti dell'altro potrebbero causare problemi di distorsione della versione. Per ulteriori informazioni, consulta Considerazioni sull'adozione delle funzionalità .

Riferimento AOSP ZTL

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 utilizza un file di dati sul dispositivo per mappare la posizione su un set di ID di fuso orario.

Un set di dati di riferimento derivato da altri progetti open source è incluso nel codice sorgente. Per maggiori dettagli, vedere README.md e i vari file LICENSE.

Eseguire il debug e testare

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

Interagisci con il servizio location_time_zone_manager

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

Per scaricare lo stato corrente di location_time_zone_manager , utilizzare:

adb shell cmd location_time_zone_manager dump

Per visualizzare un set completo di opzioni della riga di comando per assistere con i test, utilizzare:

adb shell cmd location_time_zone_manager help

L'output della guida descrive inoltre le proprietà del servizio device_config che possono essere utilizzate per influenzare il comportamento di time_zone_detector per il test o in produzione. Per ulteriori informazioni, vedere Configurazione di un dispositivo utilizzando il servizio device_config .

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

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