Best practice per l'utilizzo della posizione in background

Questa pagina spiega 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 avere l' 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é l'unione del file manifest di Gradle garantirà che venga unita al file 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 messaggio 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 ulteriori informazioni sulla richiesta agli utenti dell'accesso alla posizione, consulta Richiedere le autorizzazioni di accesso alla posizione | Sensori e posizione | Android Developers nella documentazione per gli sviluppatori Android.

Garantire la pulizia corretta delle notifiche di navigazione

Per assicurarti che l'app non mantenga attive le notifiche quando non sono più necessarie, segui questi 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 il 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 per le app che accedono 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ù esatta.

In che modo le modifiche in Android 14 influiscono sull'SDK Navigation

Quando richiami startGuidance() nella tua app, il servizio in primo piano inizia a mostrare le notifiche agli utenti 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 esatta dell'utente in background richiede l'autorizzazione dell'utente. Per impostazione predefinita, se un'app non ha l'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'eccezione SecurityException, causando l'arresto anomalo dell'app.

In che modo l'SDK Navigation mitiga questo problema

A partire dalla versione 5.4.0, l'SDK Navigation gestisce questa 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 file AndroidManifest. In questo modo, l'app non deve dichiarare l'autorizzazione stessa, poiché l'unione di Gradle la gestirà. Tuttavia, se una notifica non viene mostrata all'utente prima che l'app passi in background, l'SDK Navigation si affiderà al sistema per fornire gli 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 posizione per la navigazione

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