Подтвердить что ты не робот

Как остановить диспетчер местоположений?

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

Я вызываю startGPS() в onCreate-Methode в одном действии (только один, позвольте мне называть его StartActivity).

protected void startGPS()
{    
 try
 {           
     lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
     lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
     lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
 }
 catch(Exception e)
 {
     e.printStackTrace();
 }
}

И если это действие будет уничтожено (поэтому, когда приложение будет закрыто), я вызываю endGPS()

public void endGPS()
{

 try
 {           
     lmanager.removeUpdates(this);
     lmanager=null;
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
}

Некоторые идеи, некоторые предложения, что я сделал не так?!

4b9b3361

Ответ 1

Возможно ли, что ваша деятельность не уничтожается? т.е. вы нажали кнопку "Домой". Переместите ваш gps start/stop в onStart и onPause.

Ответ 2

Вы должны вызвать метод removeUpdates внутри метода onPause:

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
    Log.i(TAG, "onPause, done");
}

Ответ 3

Эмулятор никогда не избавляется от значка GPS после загрузки. Следовательно, на эмуляторе вы не можете использовать значок GPS в качестве теста относительно того, работает ли GPS еще. Однако на устройстве значок должен исчезнуть.

Должен ли я использовать двух разных слушателей?

Конечно. Я не знаю, удалит ли removeUpdates() оба, или даже если оба запроса зарегистрированы в одном прослушивателе.

Ответ 4

Я вижу, что с этого поста прошло немного времени, но, возможно, это поможет кому-то другому. Я использую: removeUpdates (this), потому что мой слушатель - это активность, в которой я реализую диспетчер местоположений, вам нужно указать своего слушателя.

Ответ 5

Я использую: locationManager.removeUpdates(locationListener); Его работа

    @Override
protected void onPause() {
    super.onPause();
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }


    locationManager.removeUpdates(locationListener);
}