2013-06-25 11 views
8

Po prostu potrzebuję uzyskać lokalizację użytkownika. Najlepiej dokładne położenie, ale jeśli nie jest to możliwe, zgrubna lokalizacja byłaby w porządku.LocationManager i LocationClient razem, aby uzyskać lokalizację użytkownika

Według dokumentów:

LocationClient.getLastLocation()

Returns the best most recent location currently available.

i

LocationManager.getLastKnownLocation(String)

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

Jeśli moje zrozumienie jest słuszne, pierwsze da mi bardzo dobry wynik (lub czasami nieważne), podczas gdy drugie da mi wynik, który rzadko będzie zerowy.

To jest mój kod (uproszczone)

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; 
    } 
} 

Wydaje się działać, ale moje pytania są następujące:

  1. Czy moje rozumienie getLastLocation i getLastKnownLocation jest prawidłowy?
  2. Czy to dobre podejście?
  3. Czy mogę mieć kłopoty z używaniem obu w tej samej czynności?

Dzięki

Odpowiedz

7

LocationClient.getLastLocation() zwraca tylko null jeśli poprawka lokalizacja jest niemożliwa do ustalenia. getLastLocation() nie jest gorzej niż getLastKnownLocation() i zwykle jest znacznie lepszy. Nie sądzę, żeby warto było "powrócić" do getLastKnownLocation(), tak jak ty.

Nie możesz wpaść w kłopoty używając obu, ale to przesada.

Oczywiście należy pamiętać, że LocationClient jest częścią usługi Google Play Services, więc jest dostępna tylko na urządzeniach, na których platformie znajduje się Sklep Google Play. Niektóre urządzenia mogą być wyposażone w niestandardową wersję Androida, a Ty nie będziesz mieć dostępu do LocationClient.

Dokumentacja usług Google Play omawia to bardziej szczegółowo.

+0

Dobrze wiedzieć! Mam już kod do obsługi dostępności Google Play (w rzeczywistości aplikacja może po prostu nie działać bez niego). Początkowo korzystałem tylko z usług LocationServices, ale wielokrotnie uzyskiwałem z tego dziwne wyniki. Przejście na LocationClient dało mi znacznie lepsze wyniki, ale także zerowe wyniki w wielu przypadkach, których nie mogłem odtworzyć. Pomyślałem, że system Android może nagrać ostatnią znaną lokalizację w pewnym miejscu, która byłaby dostępna tylko dla klasy LocationService, stąd mój kod powyżej. Jeśli to nie prawda, to lepiej polegać tylko na LocationClient, prawda? – Androiderson

+0

Zobacz [przepływ] (http://developer.android.com/images/location/getting-location.png) [oficjalnej strony programisty.] (Http://developer.android.com/guide/topics/ location/strategies.html) – Aiapaec

Powiązane problemy