2013-06-25 14 views
8

Ho semplicemente bisogno di ottenere la posizione dell'utente. Preferibilmente la posizione esatta, ma se non è possibile, una posizione approssimativa andrebbe bene.LocationManager e LocationClient insieme per ottenere la posizione dell'utente

Secondo la documentazione:

LocationClient.getLastLocation()

Returns the best most recent location currently available.

e

LocationManager.getLastKnownLocation(String)

Returns a Location indicating the data from the last known location fix obtained from the given provider.

Se ho ragione, il primo mi darà un risultato molto buono (o qualche volta nulla) mentre il secondo mi darà un risultato che raramente sarebbe nullo.

Questo è il mio codice (semplificato)

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationClient = new LocationClient(this, this, this); 

@Override 
public void onConnected(Bundle dataBundle) { 
    setUserLocation(); 
} 

private void setUserLocation() { 
    myLocation = locationClient.getLastLocation(); 

    if (myLocation == null) { 
     myLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(new Criteria(), false)); 
     if (myLocation == null) { 
      //I give up, just set the map somewhere and warn the user. 
      myLocation = new Location(""); 
      myLocation.setLatitude(-22.624152); 
      myLocation.setLongitude(-44.385624); 
      Toast.makeText(this, R.string.location_not_found, Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     isMyLocationOK = true; 
    } 
} 

Sembra di essere al lavoro, ma le mie domande sono:

  1. è la mia comprensione di getLastLocation e getLastKnownLocation corretta?
  2. È un buon approccio?
  3. Posso avere problemi ad utilizzare entrambi nella stessa attività?

Grazie

risposta

7

LocationClient.getLastLocation() restituisce solo null se un fix posizione è impossibile da determinare. getLastLocation() non è peggiore di rispetto a getLastKnownLocation() e di solito è molto meglio. Non penso che valga la pena "ricadere" su getLastKnownLocation() come fai tu.

Non si può avere problemi con entrambi, ma è eccessivo.

Naturalmente, si deve ricordare che LocationClient fa parte di Google Play Services, quindi è disponibile solo su dispositivi la cui piattaforma include Google Play Store. Alcuni dispositivi potrebbero utilizzare una versione non standard di Android e non sarà possibile accedere a LocationClient.

La documentazione di Google Play Services ne parla in maggior dettaglio.

+0

Buono a sapersi! Ho già il codice per gestire la disponibilità di Google Play (infatti l'app potrebbe non funzionare senza di essa). All'inizio usavo solo LocationServices ma molte volte ho ottenuto strani risultati da esso. Passare a LocationClient mi ha dato risultati molto migliori, ma anche risultati nulli in molti casi che non riuscivo a riprodurre. Ho pensato che il sistema Android potesse registrare l'ultima posizione conosciuta in un posto che sarebbe accessibile solo alla classe LocationService, quindi il mio codice sopra. Se ciò non è vero, allora è meglio fare affidamento solo su LocationClient, giusto? – Androiderson

+0

Vedere questo [flusso] (http://developer.android.com/images/location/getting-location.png) del [web ufficiale degli sviluppatori.] (Http://developer.android.com/guide/topics/ posizione/strategies.html) – Aiapaec

Problemi correlati