Recupera l'ultima posizione nota

Se utilizzi le API di localizzazione di Google Play Services, l'app può richiedere l'ultima posizione nota del dispositivo dell'utente. Nella maggior parte dei casi ti interessano posizione corrente dell'utente, che di solito equivale all'ultima posizione nota posizione del dispositivo.

In particolare, utilizza fusa fornitore di servizi di localizzazione per recuperare l'ultima posizione nota del dispositivo. La fusione Il provider di posizione è una delle API di geolocalizzazione in Google Play Services. it gestisce la tecnologia di localizzazione sottostante e fornisce una semplice API per puoi specificare i requisiti a un livello generale, come alta precisione o bassa potenza. Ottimizza inoltre l'utilizzo della batteria del dispositivo.

Nota: quando l'app è in esecuzione in background, accesso alla posizione deve essere indispensabili per la funzionalità di base dell'app ed è accompagnato da funzionalità informativa agli utenti.

Questa lezione mostra come effettuare una singola richiesta per la posizione di un dispositivo utilizzando getLastLocation() nel provider di posizione fused.

Configurare Google Play Services

Per accedere al fornitore di posizione fuso, il progetto di sviluppo dell'app deve includono Google Play Services. Scaricare e installare Google Play Services mediante l'SDK Manager e aggiungere la libreria al progetto. Per maggiori dettagli, consulta la guida Configurazione di Google Play Servizi.

Specifica le autorizzazioni app

Le app le cui funzioni usano i servizi di geolocalizzazione devono richiedere le autorizzazioni di accesso alla posizione, a seconda dei casi d'uso di queste funzionalità.

Crea client dei servizi di geolocalizzazione

Nel metodo onCreate() delle tue attività, crea un'istanza del client del provider di località Fused 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);
}

Visualizza l'ultima posizione nota

Una volta creato il client dei servizi di geolocalizzazione, puoi ottenere l'ultima posizione nota del dispositivo di un utente. Quando l'app è collegati, puoi usare il provider di localizzazione getLastLocation() per recuperare la posizione del dispositivo. La precisione della posizione restituita da questa chiamata è determinata dall'impostazione di autorizzazione che inserisci nella tua app come descritto nella guida su come richiedere le autorizzazioni di accesso alla posizione.

Per richiedere l'ultima posizione nota, chiama il getLastLocation() . Il seguente snippet di codice illustra la richiesta e una semplice gestione del 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
                }
            }
        });

La getLastLocation() restituisce un Task che puoi utilizzare per ottenere Location con le coordinate di latitudine e longitudine di un oggetto posizione geografica. L'oggetto location può essere null nel le seguenti situazioni:

  • La geolocalizzazione è 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 la cancellazione della cache.
  • Il dispositivo non ha mai registrato la sua posizione, come nel caso di un nuovo dispositivo o un dispositivo di cui sono state ripristinate le impostazioni di fabbrica.
  • Google Play Services sul dispositivo è stato riavviato e non è attivo Client del provider di località con cui è stata richiesta la posizione dopo il sono stati riavviati. Per evitare questa situazione, puoi creare un nuovo cliente richiedere tu stesso gli aggiornamenti della posizione. Per ulteriori informazioni, consulta la sezione Posizione di ricezione Aggiornamenti.

Scegli la stima della località migliore

FusedLocationProviderClient offre diversi metodi per recuperare il dispositivo i dati sulla posizione. Scegli una delle seguenti opzioni, a seconda del tipo caso d'uso:

  • getLastLocation() ottiene una stima della posizione più rapidamente e riduce al minimo l'utilizzo della batteria, attribuiti alla tua app. Tuttavia, i dati sulla posizione potrebbero non essere aggiornati, se nessun altro cliente ha posizione utilizzata di recente.
  • getCurrentLocation() ottiene una posizione più aggiornata e precisa in modo più costante. Tuttavia, questo metodo può causare il calcolo della posizione attiva sul dispositivo

    Si tratta del metodo consigliato per visualizzare una nuova posizione, quando possibile, e è più sicura rispetto ad alternative come l'avvio e la gestione degli aggiornamenti della posizione di usare requestLocationUpdates(). Se la tua app chiama requestLocationUpdates(), la tua app a volte può consumare grandi quantità di alimentazione se la posizione non è disponibile o se la richiesta non viene interrotta correttamente dopo aver ottenuto una nuova posizione.

Risorse aggiuntive

Per ulteriori informazioni sul recupero della posizione attuale in Android, visualizza l' seguenti materiali:

Campioni

  • App di esempio per dimostrare le best practice durante il recupero posizione corrente.