менеджер местоположения проблема андроида - PullRequest
0 голосов
/ 01 августа 2011

Я пытаюсь получить местоположение пользователя при нажатии кнопки.У меня есть следующий код в моем приемнике нажатия кнопки:


locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
bestProvider = locationManager.getBestProvider(criteria, false);
Location currentLocation = locationManager.getLastKnownLocation(bestProvider);
Log.e(tag,"reached till here");
location = Double.toString(currentLocation.getLatitude()) + " " + Double.toString(currentLocation.getLongitude());
Toast.makeText(getApplicationContext(), location, Toast.LENGTH_LONG);
MyLocation.setText(location);

Я получаю вывод reached till here в logcat.После этого приложение останавливается и просит меня принудительно закрыть его.Сначала я провел поиск и выяснил, что getLatitude и getLongitude возвращают двойные значения.Поэтому я исправил код.Но все же я получаю ошибку.Что я делаю не так?

РЕДАКТИРОВАТЬ: Ошибка logcat:Получил RemoteException, отправив setActive (false) уведомление на pid 796 uid 10036Я думаю, что currentLocation возвращает ноль

Ответы [ 2 ]

3 голосов
/ 01 августа 2011

Если вы тестируете свое приложение в Emulator, у вас, вероятно, нет поставщика, а объект currentLocation имеет значение null, и поэтому getLatitude() и getLongitude() дадут NPE.

Редактировать: как сказал @grinnner, с точки зрения DDMS вы можете смоделировать отправку координат местоположения. Откройте перспективу DDMS в затмении и на вкладке LocationControls установите долготу и широту, а затем нажмите кнопку отправить. Убедитесь, что на вкладке «Устройства» находится фокус на эмуляторе, на котором вы запускаете приложение.

1 голос
/ 01 августа 2011

Если у вас нет последнего известного местоположения (просто выполните нулевую проверку на возвращаемое значение), вам нужно добавить слушатель местоположения, чтобы получить местоположение.Примерно так:

// Start listening for a new location.
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String bestProvider = lm.getBestProvider(new Criteria(), true);    
mMyLocationListener = new MyLocationListener();
lm.requestLocationUpdates(bestProvider, 0, 0, mMyLocationListener);

private class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {
        // Do what you need to do with the longitude and latitude here.
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
}

Вы также должны помнить об удалении слушателя местоположения, как только он вам больше не нужен:

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.removeUpdates(mMyLocationListener);
mMyLocationListener = null;
...