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à di rilevamento automatico del fuso orario facoltativa che consente ai dispositivi di utilizzare i dati della mappa della posizione e 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 tramite telefonia. Poiché questa funzionalità non richiede la telefonia, può essere supportata su dispositivi di vari fattori di forma, oltre che sui 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 in Impostazioni, introdotta in Android 12, per consentire agli utenti di scegliere tra i meccanismi di rilevamento del fuso orario tramite telefonia e in base alla 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 un 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 un LTZP.

  • Un'implementazione di riferimento di LTZP.

  • Strumenti host 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 dell'utente

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 di posizione, 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 esplicitamente il rilevamento della posizione per il rilevamento del fuso orario tramite la schermata Data e ora delle Impostazioni. Gli utenti non devono concedere esplicitamente l'autorizzazione tramite una finestra di dialogo delle autorizzazioni.

  • I dati sulla posizione del dispositivo non vengono trasmessi ai servizi della piattaforma Android. Al contrario, si verifica quanto segue:

    • I servizi di rilevamento del fuso orario ricevono gli ID dei fusi orari dall'LTZP, non dalla posizione del dispositivo. Questa è l'API minima necessaria per supportare il rilevamento del fuso orario in base alla posizione.
    • Gli integratori di sistema controllano il funzionamento dei singoli LTZP. Le implementazioni di LTZP possono utilizzare i dati della mappa del fuso orario memorizzati interamente sul dispositivo con Android, utilizzare i server o adottare un approccio ibrido.

Funzionamento

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 posizione 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, gli LTZP non vengono avviati. Ciò significa che il sistema di rilevamento del fuso orario in base alla posizione non chiede agli LTZP di monitorare la posizione del dispositivo, a meno che non sia esplicitamente richiesto. Alcuni dei motivi di questo comportamento sono i seguenti:

  • A differenza dei segnali di telefonia che vengono ricevuti passivamente nell'ambito delle normali operazioni di telefonia, la posizione può essere richiesta attivamente ai fornitori di posizione Android e può consumare energia aggiuntiva.
  • Le impostazioni di posizione sono limitate all'utente e Android deve rispettare le impostazioni dell'utente attuale.
  • 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 attuale modifica le impostazioni per evitare la condivisione dei dati sulla posizione tra gli utenti.

Di conseguenza, dopo aver impostato l'algoritmo attuale sulla posizione o dopo aver cambiato l'utente attuale, sono necessari alcuni secondi prima che il fuso orario possa essere rilevato. Ciò dipende anche dalle implementazioni degli LTZP utilizzati.

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

LTZP primario
Viene eseguito sempre quando l'utente ha consentito l'esecuzione della funzionalità di rilevamento del fuso orario in base alla posizione.
LTZP secondario
Viene eseguito se l'LTZP primario segnala che il fuso orario è incerto, segnala un errore permanente o si verifica un timeout durante l'inizializzazione. Si interrompe se l'LTZP primario invia un suggerimento certo.

Come mostrato nella Figura 1, il servizio time_zone_detector riceve suggerimenti per il fuso orario dall'algoritmo di telefonia o di posizione. L'algoritmo di posizione riceve suggerimenti dall'LTZP primario 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 dispositivo

Per supportare la funzionalità del fuso orario in base alla posizione, i dispositivi devono essere configurati con gli LTZP che possono utilizzare. Perché il rilevamento del fuso orario in base alla posizione sia funzionale e visibile agli utenti in Impostazioni, è necessario che almeno un LTZP sia abilitato e configurato.

Configurazione dispositivo

Questa sezione descrive come i produttori di dispositivi possono configurare i dispositivi per supportare il rilevamento del fuso orario in base alla posizione.

La configurazione di base di AOSP 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, è necessario abilitare 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 Consente di attivare l'LTZP primario.
config_primaryLocationTimeZoneProviderPackageName Imposta questo valore sul nome del pacchetto dell'app in cui è possibile trovare il servizio del fornitore principale.
config_enableSecondaryLocationTimeZoneProvider false Consente di attivare l'LTZP secondario.
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 di AOSP ha la chiave config_enableGeolocationTimeZoneDetection impostata su true, il che consente di supportare la 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 gli LTZP dalla riga di comando per i test. (Per maggiori informazioni, vedi Debug e test)

API di stato LTZP

In Android 14, le API LTZP supportano le informazioni sullo stato di segnalazione 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 posizione.

La possibilità di segnalare che il comportamento dell'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 attuali, l'LTZP può segnalare queste informazioni sullo stato ai componenti interni della piattaforma, come l'app Impostazioni, tramite il reportSuggestion metodo. L'app Impostazioni può quindi notificare agli utenti tramite stringhe o personalizzazioni personalizzabili che sono presenti impostazioni che devono essere modificate per il corretto funzionamento dell'algoritmo di posizione.

Per maggiori informazioni sugli stati che l'LTZP può segnalare, vedi TimeZoneProviderStatus.

Configurazione e deployment di LTZP

Quando configuri un LTZP, leggi le istruzioni nel codice sorgente di 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 dell'LTZP. Avere un processo dedicato per un LTZP comporta un overhead elevato; idealmente, il processo dell'app scelto è quello in esecuzione sempre, ad esempio il server di sistema.

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

LTZP di riferimento AOSP

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 un file di dati sul dispositivo per mappare la posizione a un insieme di ID dei fusi orari.

Nel codice sorgente è incluso 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 in base alla posizione.

Interagire con il servizio location_time_zone_manager

Quando l'algoritmo di posizione è 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 attuale di location_time_zone_manager, utilizza:

adb shell cmd location_time_zone_manager dump

Per visualizzare un insieme completo di opzioni della riga di comando che ti aiutano a eseguire 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 maggiori informazioni, vedi Configurare un dispositivo utilizzando il servizio device_config.

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

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