Почему у LocationManager нет местоположения lastKnown?

63
4

Я хочу, чтобы местоположение пользователя и это тоже только один раз после того, как пользователь перешел на свой собственный


locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE);
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
System.out.println(location.toString());
lat=location.getLatitude();
lng=location.getLongitude();
}
p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));

Однако я не могу получить местоположение пользователя из-за медленного интернет-соединения с мобильным телефоном.

спросил(а) 2021-01-27T19:35:03+03:00 4 месяца, 4 недели назад
1
Решение
88

Недостаточно просто получить locationManager и вызвать getLastKnownLocation()
потому что до тех пор, пока не появится обновление, не будет "последнего известного местоположения",
Вам не хватает этого запроса, предоставленного классом LocationManager:


public void requestLocationUpdates(java.lang.String provider, 
long minTime,
float minDistance,
android.location.LocationListener listener)

Если ваша активность реализует LocationListener, как моя, вы можете передать "this" как LocationListener для вызова, исходящего из метода этого класса. В противном случае есть несколько других перегрузок, в которых вместо этого используются классы Activity или Looper.


locationManager.requestLocationUpdates(provider, minTime, minDistance, this);

Чтобы убедиться, что устройство получает местоположение, запросите обновления, но вы также можете
хотите поставить защитников за отказ найти поставщиков или getLastKnownLocation вернуть нуль.


locationManager.requestLocationUpdates(provider, 1, 0, this);
mostRecentLocation = locationManager.getLastKnownLocation(provider);
if(mostRecentLocation == null)
// lower your expectations, or send user message with Toast or something similar

Сообщите пользователю, чтобы он включил их совместное использование местоположения или другие службы поставщика.

ответил(а) 2021-01-27T19:35:03+03:00 4 месяца, 4 недели назад
45

Метод getLastKnownLocation будет возвращать только местоположение, если gps LocationProvider где-то сохранил местоположение. Если пользователь еще не использовал gps на своем устройстве достаточно долго, чтобы получить действительное исправление GPS, метод вернет значение null.

Даже если вы получите местоположение, проверьте время нахождения, нет гарантии, что местоположение не очень-очень старое.

ответил(а) 2021-01-27T19:35:03+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема