Ошибка местоположения Android
-
01-10-2019 - |
Вопрос
Я выделил свою проблему до нескольких строк кода
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 5.0f, this);
lat = location.getLatitude();
lng = location.getLongitude();
//lat = new Double(40.431682);
//lng = new Double(-74.2021819);
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
Мое наносятся, если вам интересно
public void onLocationChanged(Location location) {
if (location != null) {
lat = location.getLatitude();
lng = location.getLongitude();
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
}
}
Мое приложение вылетает, если я стараюсь получить последнюю
Но это работает нормально, если я кормит это местом вручную
Я понятия не имею в настоящее время, что не так
Решение
Во-первых, всякий раз, когда вы получите сбой, используете adb logcat
, DDMS или Perpected DDMS в Eclipse, чтобы получить трассу стока Java, связанного с сбоем. В этом случае я подозреваю, что вы найдете, что у вас есть NullPointerException
При попытке использовать свой location
объект.
Вы не можете использовать getLastKnownLocation()
пока хорошо после того, как вы позвоните requestLocationUpdates()
, особенно для GPS. Это может принять десятки секунд для GPS, чтобы начать предоставление исправлений.
Пожалуйста, измените свой код, чтобы устранить ваше использование getLastKnownLocation()
и просто используйте логику, требуя местоположения уже в вашем onLocationChanged()
метод. Как минимум, ищите null
location
Объект и не пытайтесь использовать его.
Другие советы
Мое исправление было в основном, чтобы просто использовать грубое местоположение.
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String bestProvider = lm.getBestProvider(criteria, true);
Location loc = lm.getLastKnownLocation(bestProvider);
lat = loc.getLatitude();
lng = loc.getLongitude();
Это может произойти, потому что точное местоположение (GPS) не включено на вашем устройстве. Или Access_fine_location разрешение не указано в вашем манифесте.
Бьюсь об заклад, если вы отлажете, вы увидите нулевое исключение. Так что это происходит, потому что вы пытаетесь извлечь широту и долготу от местоположения, которое еще не исправлена. Окружите эту добычу, если (LOC! = NULL) {} и поставьте ProgressDialog держать там пользователя