Ошибка расположения Android - PullRequest
3 голосов
/ 26 апреля 2010

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

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

Мой onLocationИзменился, если вам интересно

public void onLocationChanged(Location location) {
        if (location != null) {
        lat = location.getLatitude();
        lng = location.getLongitude();
        pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
        }
}

Мое приложение падает, если я пытаюсь получить LastKnownLocation

Но он работает нормально, если я передаю его в местоположение вручную

Понятия не имею, что не так

Ответы [ 4 ]

3 голосов
/ 26 апреля 2010

Во-первых, всякий раз, когда вы получаете сбой, используйте adb logcat, DDMS или перспективу DDMS в Eclipse, чтобы получить трассировку стека Java, связанную с падением. В этом случае, я подозреваю, вы обнаружите, что у вас есть NullPointerException при попытке использовать ваш location объект.

Вы не можете использовать getLastKnownLocation() до тех пор, пока не позвоните requestLocationUpdates(), особенно для GPS. GPS может начать предоставлять исправления в течение десятков секунд.

Пожалуйста, измените свой код, чтобы исключить использование getLastKnownLocation() и просто используйте логику, для которой требуется местоположение уже в вашем onLocationChanged() методе. Как минимум, ищите объект null location и не пытайтесь его использовать.

0 голосов
/ 25 мая 2010

Бьюсь об заклад, если вы отладите, вы увидите нулевое исключение. Так происходит, потому что вы пытаетесь извлечь широту и долготу из местоположения, которое еще не установлено. Окружите это извлечение if (loc! = Null) {} и поместите progressDialog для удержания пользователя там

0 голосов
/ 27 апреля 2010

Это может произойти, потому что точное местоположение (GPS) не включено на вашем устройстве. Или разрешение ACCESS_FINE_LOCATION не указано в вашем манифесте.

0 голосов
/ 27 апреля 2010

Мое решение было в основном просто использовать грубое расположение.

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();
...