Вопрос

Я выделил свою проблему до нескольких строк кода

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 держать там пользователя

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top