Questa pagina illustra le best practice per richiedere e gestire le autorizzazioni di utilizzo della posizione in background.
Richiedi 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 proprio file manifest, quindi non devi richiederla esplicitamente (se non è necessaria per altri scopi), poiché l'unione del file manifest di Gradle ne garantirà l'unione con il 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 notifiche, il che massimizza l'accuratezza della posizione durante la navigazione.
La richiesta deve spiegare agli utenti in che modo la concessione dell'autorizzazione migliorerà la precisione della posizione e la loro esperienza di navigazione quando l'app è in esecuzione in background.
Per ulteriori informazioni su come chiedere agli utenti l'accesso alla posizione, consulta Richiedi autorizzazioni di accesso alla posizione | Sensori e posizione | Android for Developers nella documentazione per gli sviluppatori Android.
Garantire la corretta eliminazione delle notifiche di navigazione
Per assicurarti che l'app non mantenga attive le notifiche dopo che non sono più necessarie, assicurati di eseguire i seguenti passaggi di pulizia:
- Dopo aver invocato
startGuidance()
, assicurati di invocarestopGuidance()
oclearDestination()
. - Dopo aver registrato
ArrivalListener
, assicurati di annullarne la registrazione. - Dopo aver registrato
RoadSnappedLocationProvider
, assicurati di annullarne la registrazione.
Se completi questi passaggi, le notifiche non vengono 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, invoca prima NavigationApi#clearForegroundServiceManager
Se la tua app utilizza ForegroundServiceManager
, invoca
NavigationApi#clearForegroundServiceManager
prima di invocare
NavigationApi#initForegroundServiceManagerProvider
e, se hai già
inizializzato ForegroundServiceManager
, invoca
NavigationApi#initForegroundServiceManagerMessageAndIntent
. In questo modo puoi
aggiornare l'ID notifica o i contenuti 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 ad attenuare 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.
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 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 esatta
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 SecurityException
, causando l'arresto anomalo dell'app.
In che modo l'SDK Navigation riduce il problema
A partire dalla versione 5.4.0, l'SDK Navigation gestisce questo SecurityException
senza influire sull'app, consentendo alla navigazione di continuare a funzionare in background. Inoltre, l'SDK Navigation include l'autorizzazione ACCESS_BACKGROUND_LOCATION
nel suo AndroidManifest
. In questo modo, la tua app non deve dichiarare l'autorizzazione stessa, poiché la gestione dell'unione di Gradle la gestirà. Tuttavia, se non viene mostrata una notifica all'utente prima che l'app passi in background, l'SDK Navigation si baserà sul sistema per fornire aggiornamenti sulla 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 anche agli utenti di autorizzare 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 dell'indicatore di posizione utilizzato dall'SDK Navigation aggiornando la tua app in modo che chieda agli utenti l'accesso alla posizione in background. Per ulteriori informazioni, consulta la sezione Richiedere le autorizzazioni di accesso alla posizione "Consenti sempre".