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:
- Czy moje rozumienie
getLastLocation
igetLastKnownLocation
jest prawidłowy? - Czy to dobre podejście?
- Czy mogę mieć kłopoty z używaniem obu w tej samej czynności?
Dzięki
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
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