Utilizzando le API di localizzazione di Google Play Services, la tua app può richiedere l'ultima posizione nota del dispositivo dell'utente. Nella maggior parte dei casi, ti interessa la posizione attuale dell'utente, che di solito è equivalente all'ultima posizione nota del dispositivo.
In particolare, utilizza il provider di localizzazione unitoper recuperare l'ultima posizione nota del dispositivo. Il provider di localizzazione unito è una delle API di localizzazione di Google Play Services. Gestisce la tecnologia di localizzazione sottostante e fornisce una semplice API in modo che tu possa specificare i requisiti a un livello elevato, ad esempio alta precisione o basso consumo energetico. Ottimizza anche l'utilizzo della batteria del dispositivo.
Nota: quando l'app è in esecuzione in background, l'accesso alla posizione deve essere fondamentale per la funzionalità di base dell'app e deve essere accompagnato da una divulgazione corretta agli utenti.
Questa lezione mostra come effettuare una singola richiesta per la posizione di un dispositivo utilizzando il metodo getLastLocation() nel Fused Location Provider.
Configurare Google Play Services
Per accedere al Fused Location Provider, il progetto di sviluppo dell'app deve includere Google Play Services. Scarica e installa il componente Google Play Services tramite SDK Manager e aggiungi la libreria al tuo progetto. Per maggiori dettagli, consulta la guida alla configurazione di Google Play Services.
Specificare le autorizzazioni app
Le app le cui funzionalità utilizzano i servizi di localizzazione devono richiedere le autorizzazioni di accesso alla posizione, a seconda dei casi d'uso di queste funzionalità.
Creare il client dei servizi di localizzazione
Nel metodo onCreate() della tua attività,
crea un'istanza del client di Fused Location Provider come mostrato nel seguente snippet di codice.
Kotlin
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Java
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
Recuperare l'ultima posizione nota
Dopo aver creato il client dei servizi di localizzazione
puoi recuperare l'ultima posizione nota del dispositivo di un utente. Quando l'app è
connessa a questi servizi, puoi utilizzare il metodo
getLastLocation()
del provider di localizzazione unito per recuperare la posizione del dispositivo. La precisione della posizione restituita
da questa chiamata è determinata dall'impostazione dell'autorizzazione inserita nel manifest dell'app, come descritto nella guida su come
richiedere le autorizzazioni di accesso alla posizione.
Per richiedere l'ultima posizione nota, chiama il
getLastLocation()
metodo. Il seguente snippet di codice illustra la richiesta e una semplice gestione della
risposta:
Kotlin
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Java
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
Il
getLastLocation()
metodo restituisce un Task
che puoi utilizzare per ottenere un
Location
oggetto con le coordinate di latitudine e longitudine di una
posizione geografica. L'oggetto della posizione può essere null nelle
seguenti situazioni:
- La posizione è disattivata nelle impostazioni del dispositivo. Il risultato potrebbe essere
nullanche se l'ultima posizione è stata recuperata in precedenza, perché la disattivazione della posizione cancella anche la cache. - Il dispositivo non ha mai registrato la sua posizione, il che potrebbe essere il caso di un nuovo dispositivo o di un dispositivo che è stato ripristinato alle impostazioni di fabbrica.
- Google Play Services sul dispositivo è stato riavviato e non è presente alcun client del Fused Location Provider attivo che abbia richiesto la posizione dopo il riavvio dei servizi. Per evitare questa situazione, puoi creare un nuovo client e richiedere autonomamente gli aggiornamenti della posizione. Per maggiori informazioni, vedi Richiedere aggiornamenti della posizione.
Scegliere la migliore stima della posizione
FusedLocationProviderClient fornisce diversi metodi per recuperare le informazioni sulla posizione del dispositivo. Scegli una delle seguenti opzioni, a seconda del caso d'uso dell'app:
getLastLocation()ottiene una stima della posizione più rapidamente e riduce al minimo l'utilizzo della batteria attribuibile alla tua app. Tuttavia, le informazioni sulla posizione potrebbero non essere aggiornate se nessun altro client ha utilizzato attivamente la posizione di recente.getCurrentLocation()ottiene una posizione più recente e precisa in modo più coerente. Tuttavia, questo metodo può causare il calcolo attivo della posizione sul dispositivo.Questo è il modo consigliato per ottenere una posizione recente, quando possibile, ed è più sicuro rispetto ad alternative come l'avvio e la gestione degli aggiornamenti della posizione utilizzando
requestLocationUpdates(). Se l'app chiamarequestLocationUpdates(), a volte può consumare grandi quantità di energia se la posizione non è disponibile o se la richiesta non viene interrotta correttamente dopo aver ottenuto una posizione recente.
Risorse aggiuntive
Per ulteriori informazioni sul recupero della posizione attuale su Android, consulta i seguenti materiali:
Esempi
- App di esempio per mostrare le best practice durante il recupero della posizione attuale.