Utilizzando le API di geolocalizzazione 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 in genere corrisponde all'ultima posizione nota del dispositivo.
Nello specifico, utilizza il fornitore di servizi di geolocalizzazione congiunto per recuperare l'ultima posizione nota del dispositivo. Il fornitore di posizione combinato è una delle API di geolocalizzazione in Google Play Services. Gestisce la tecnologia di geolocalizzazione sottostante e fornisce un'API semplice per consentirti di specificare i requisiti a un livello elevato, ad esempio alta precisione o basso consumo energetico. Inoltre, ottimizza 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 un'informativa corretta rivolta agli utenti.
Questa lezione mostra come effettuare una singola richiesta per la posizione di un
dispositivo utilizzando il metodo
getLastLocation()
nel fornitore di posizione combinato.
Configurare Google Play Services
Per accedere al fornitore di posizione combinato, il progetto di sviluppo della tua app deve includere Google Play Services. Scarica e installa il componente Google Play Services tramite SDK Manager e aggiungi la libreria al progetto. Per maggiori dettagli, consulta la guida alla configurazione dei servizi Google Play.
Specificare le autorizzazioni app
Le app le cui funzionalità utilizzano i servizi di geolocalizzazione devono richiedere le autorizzazioni di accesso alla posizione, a seconda dei casi d'uso di queste funzionalità.
Crea un client per i servizi di geolocalizzazione
Nel metodo onCreate()
dell'attività,
crea un'istanza del client Fused Location Provider come mostrato nello snippet di codice seguente.
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); }
Ottenere l'ultima posizione nota
Dopo aver creato il client Location Services, puoi recuperare l'ultima posizione nota del dispositivo di un utente. Quando la tua app è collegata a questi servizi, puoi utilizzare il metodo getLastLocation()
del fornitore di posizione combinato per recuperare la posizione del dispositivo. La precisione della posizione restituita
da questa chiamata è determinata dall'impostazione dell'autorizzazione inserita nel file manifest
dell'app, come descritto nella guida su come
richiedere le autorizzazioni di accesso alla posizione.
Per richiedere l'ultima posizione nota, chiama il metodo
getLastLocation()
. 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 metodo
getLastLocation()
restituisce un Task
che puoi utilizzare per ottenere un oggetto
Location
con le coordinate di latitudine e longitudine di una
località geografica. L'oggetto location può essere null
nelle seguenti situazioni:
- La posizione è disattivata nelle impostazioni del dispositivo. Il risultato potrebbe essere
null
anche se l'ultima posizione è stata recuperata in precedenza perché la disattivazione della posizione comporta anche l'eliminazione della cache. - Il dispositivo non ha mai registrato la sua posizione, il che potrebbe essere il caso di un nuovo dispositivo o di un dispositivo di cui sono state ripristinate le impostazioni di fabbrica.
- Google Play Services sul dispositivo è stato riavviato e non è presente alcun client Fused Location Provider attivo che abbia richiesto la posizione dopo il riavvio dei servizi. Per evitare questa situazione, puoi creare un nuovo cliente e richiedere autonomamente gli aggiornamenti della posizione. Per ulteriori informazioni, consulta Ricevere aggiornamenti sulla posizione.
Scegliere la stima della posizione migliore
FusedLocationProviderClient
fornisce diversi metodi per recuperare le informazioni sulla posizione del dispositivo. Scegli una delle seguenti opzioni, a seconda del caso d'uso della tua app:
getLastLocation()
ottiene una stima della posizione più rapidamente e riduce al minimo l'utilizzo della batteria che può essere attribuito alla tua app. Tuttavia, le informazioni sulla posizione potrebbero essere obsolete se nessun altro client ha utilizzato attivamente la posizione di recente.getCurrentLocation()
viene visualizzata una posizione più aggiornata e precisa in modo più coerente. Tuttavia, questo metodo può causare il calcolo della posizione attiva sul dispositivoQuesto è il modo consigliato per ottenere una posizione aggiornata, se possibile, ed è più sicuro rispetto ad alternative come l'avvio e la gestione degli aggiornamenti della posizione tramite
requestLocationUpdates()
. Se la tua 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 aggiornata.
Risorse aggiuntive
Per ulteriori informazioni sul recupero della posizione attuale in Android, consulta i seguenti materiali:
Campioni
- App di esempio per dimostrare le best practice durante il recupero della posizione corrente.