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 di navigazione include questa autorizzazione nel file manifest, quindi non è necessario richiederla esplicitamente (se non è necessaria per altri scopi), poiché lo strumento di unione dei manifest di Gradle ne garantirà l'unione con il 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, massimizzando la precisione della localizzazione durante la navigazione.
Il prompt deve spiegare agli utenti in che modo la concessione dell'autorizzazione migliorerà la precisione della localizzazione e l'esperienza di navigazione quando l'app è in esecuzione in background.
Per ulteriori informazioni su come richiedere agli utenti l'accesso alla posizione, consulta Richiedi autorizzazioni di accesso alla posizione | Sensori e posizione | Android Developers nella documentazione per lo sviluppo Android.
Assicurati di eseguire la pulizia corretta delle notifiche di navigazione
Per assicurarti che la tua app non mantenga attive le notifiche dopo che non sono più necessarie, assicurati di eseguire 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 comportare un consumo della batteria e possibili perdite di memoria.
Quando richiami 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 o i contenuti della notifica dopo aver inizializzato il gestore del servizio in primo piano.
Informazioni sulle nuove limitazioni introdotte in Android 14
Android 14 (Android U) ha introdotto nuove restrizioni per le app che accedono alla posizione dell'utente in background. Per contribuire a mitigare queste modifiche, l'SDK Navigation è stato aggiornato nella versione 5.4.0 per gestire meglio l'accesso alla posizione in background. Ti consigliamo inoltre di aggiornare la tua implementazione per assicurarti che la tua app continui ad avere accesso ai dati sulla posizione 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 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'eccezione SecurityException, causando l'arresto anomalo dell'app.
In che modo l'SDK Navigation riduce questo problema
A partire dalla versione 5.4.0, l'SDK di navigazione 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 file AndroidManifest. In questo modo, l'app non deve dichiarare l'autorizzazione stessa, poiché l'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 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 anche 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 posizione utilizzato da Navigation SDK aggiornando la tua app in modo che chieda agli utenti l'accesso alla posizione in background. Per saperne di più, consulta Richiedi le autorizzazioni di accesso alla posizione "Consenti sempre".