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 di solito equivale all'ultima posizione nota del dispositivo.
In particolare, utilizza il provider di localizzazione integrata per recuperare l'ultima posizione nota del dispositivo. Il provider di geolocalizzazione integrata è una delle API di geolocalizzazione di Google Play Services. Gestisce la tecnologia di geolocalizzazione sottostante e fornisce un'API che ti consente di specificare i requisiti a un livello elevato, ad esempio alta precisione o basso consumo energetico. Inoltre, ottimizza l'utilizzo della batteria del dispositivo.
Questa lezione mostra come effettuare una singola richiesta per la posizione di un dispositivo utilizzando il metodo getLastLocation() nel provider di geolocalizzazione integrata.
Configura Google Play Services
Per accedere al provider di geolocalizzazione fusa, il progetto di sviluppo della tua app deve includere Google Play Services. Scarica e installa il componente Google Play Services tramite l'SDK Manager e aggiungi la libreria al tuo progetto. Per maggiori dettagli, consulta la guida per configurare Google Play Services.
Specifica 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à.
Crea un client dei servizi di localizzazione
Nel metodo onCreate() della tua Activity, crea un'istanza del Fused Location Provider Client, come mostrato nello snippet di codice seguente.
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Recupera l'ultima posizione nota
Una volta creato il client dei servizi di localizzazione, puoi ottenere l'ultima posizione nota del dispositivo di un utente. Utilizza il metodo getLastLocation() del provider di localizzazione integrata per recuperare la posizione del dispositivo. La precisione della posizione restituita da questa chiamata è determinata dall'impostazione di 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 metodo getLastLocation().
Il seguente snippet di codice illustra la richiesta e la gestione di base della risposta:
fusedLocationClient.lastLocation .addOnSuccessListener { location: Location? -> // Got last known location. In some rare situations this can be null. }
Il metodo getLastLocation() restituisce un Task che puoi utilizzare per ottenere un oggetto Location con le coordinate di latitudine e longitudine di una posizione geografica. L'oggetto posizione potrebbe 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 svuota 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 ripristinato alle impostazioni di fabbrica.
- Google Play Services sul dispositivo è stato riavviato e non esiste un client 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 gli aggiornamenti della posizione autonomamente. Per saperne di più, consulta Richiedi aggiornamenti della posizione.
Scegli la stima della posizione migliore
FusedLocationProviderClient fornisce diversi metodi per recuperare i dati 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, i dati sulla posizione potrebbero non essere aggiornati se nessun altro client ha utilizzato attivamente la posizione di recente.getCurrentLocation()ottiene una posizione più aggiornata e precisa in modo più coerente. Tuttavia, questo metodo può causare il calcolo della posizione attiva sul dispositivo.Questo è il modo consigliato per ottenere una posizione aggiornata, quando possibile, ed è più sicuro rispetto ad alternative come l'avvio e la gestione degli aggiornamenti della posizione da parte tua utilizzando
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 nuova posizione.
Risorse aggiuntive
Per saperne di più sul recupero della posizione corrente in Android, consulta i seguenti materiali:
Esempi
- App di esempio per dimostrare le best practice durante il recupero della posizione attuale.