Best practice per l'utilizzo della posizione in background

Questa pagina illustra le best practice per richiedere e gestire le autorizzazioni di utilizzo della posizione in background.

Richiedere le autorizzazioni di accesso alla posizione "Consenti sempre"

A partire da Android 14, le app devono disporre dell'autorizzazione ACCESS_BACKGROUND_LOCATION per accedere alla posizione dell'utente. L'SDK Navigation include questa autorizzazione nel file manifest, quindi non devi richiederla esplicitamente (se non è necessaria per altri scopi), poiché Gradle manifest merger assicurerà che venga unita al manifest dell'app.

Tuttavia, l'autorizzazione ACCESS_BACKGROUND_LOCATION non è sufficiente per accedere alla posizione in background e ti consigliamo di richiedere agli utenti le autorizzazioni di accesso alla posizione "Consenti sempre". In questo modo, l'app può essere eseguita in background e mostrare le notifiche, il che massimizza la precisione della posizione durante la navigazione.

Il prompt deve spiegare agli utenti in che modo la concessione dell'autorizzazione migliorerà la precisione della posizione e l'esperienza di navigazione quando l'app è in esecuzione in background.

finestra di dialogo
dell'autorizzazione di esempio

Per saperne di più su come richiedere agli utenti l'accesso alla posizione, consulta Richiedere autorizzazioni di accesso alla posizione | Sensori e posizione | Android Developers nella documentazione per gli sviluppatori Android.

Garantire la corretta pulizia delle notifiche di navigazione

Per assicurarti che la tua app non mantenga attive le notifiche dopo che non sono più necessarie, esegui i seguenti passaggi di pulizia:

  • Dopo aver richiamato startGuidance(), assicurati di richiamare stopGuidance() o clearDestination().
  • Dopo aver registrato ArrivalListener, assicurati di annullare la registrazione.
  • Dopo aver registrato RoadSnappedLocationProvider, assicurati di annullare la registrazione.

Il completamento di questi passaggi garantisce che le notifiche non vengano mantenute attive quando non sono più necessarie, il che potrebbe causare un consumo eccessivo della batteria e possibili perdite di memoria.

Quando richiami di nuovo i metodi NavigationApi#initForegroundServiceManager, richiama prima NavigationApi#clearForegroundServiceManager

Se la tua app utilizza ForegroundServiceManager, richiama NavigationApi#clearForegroundServiceManager prima di richiamare NavigationApi#initForegroundServiceManagerProvider e, se hai già inizializzato ForegroundServiceManager, richiama NavigationApi#initForegroundServiceManagerMessageAndIntent. Puoi farlo per aggiornare l'ID notifica o il contenuto della notifica dopo aver inizializzato il gestore dei servizi in primo piano.

Informazioni sulle nuove limitazioni introdotte in Android 14

Android 14 (Android U) ha introdotto nuove limitazioni all'accesso delle app alla posizione dell'utente in background. Per contribuire a mitigare queste modifiche, l'SDK Navigation è stato aggiornato alla versione 5.4.0 per gestire meglio l'accesso alla posizione in background. Ti consigliamo inoltre di aggiornare l'implementazione per assicurarti che la tua app continui ad avere accesso ai dati sulla posizione più precisi.

Impatto delle modifiche in Android 14 sull'SDK Navigation

Quando richiami startGuidance() nella tua app, il servizio in primo piano inizia a mostrare le notifiche utente per la navigazione passo passo. La navigazione passo passo dipende dalla possibilità di accedere alla posizione dell'utente per aggiornare il percorso e mostrare le indicazioni visive e audio corrette. A partire da Android 14, l'accesso alla posizione precisa dell'utente in background richiede l'autorizzazione dell'utente. Per impostazione predefinita, se un'app non dispone dell'autorizzazione dell'utente per l'accesso alla posizione in background e tenta di avviare un servizio in primo piano per gli aggiornamenti della posizione, il sistema genera un errore SecurityException, causando l'arresto anomalo dell'app.

Come l'SDK Navigation mitiga questo problema

A partire dalla versione 5.4.0, l'SDK Navigation gestisce questo SecurityException senza influire sull'app, consentendo alla navigazione di continuare a essere eseguita in background. Inoltre, l'SDK Navigation include l'autorizzazione ACCESS_BACKGROUND_LOCATION nel relativo AndroidManifest. In questo modo, la tua app non deve dichiarare l'autorizzazione, poiché la gestione è affidata all'unione di Gradle. Tuttavia, se una notifica non viene visualizzata all'utente prima che l'app passi in background, l'SDK Navigation si affiderà al sistema per fornire aggiornamenti della posizione. Questi aggiornamenti di sistema potrebbero non essere frequenti o precisi e comportare un'esperienza di navigazione non ottimale. Per questo motivo, ti consigliamo di chiedere agli utenti l'accesso alla posizione in background.

Cosa possono fare gli sviluppatori di app per migliorare la precisione della localizzazione per la navigazione

Puoi migliorare la precisione del segnale di localizzazione utilizzato da Navigation SDK aggiornando la tua app per chiedere agli utenti l'accesso alla posizione in background. Per ulteriori informazioni, consulta la sezione Richiedere le autorizzazioni di accesso alla posizione "Consenti sempre".