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.
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 richiamarestopGuidance()
oclearDestination()
. - 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".