Как остановить менеджер местоположения? - PullRequest
31 голосов
/ 16 ноября 2010

Не знаю почему, но иногда 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();
 }
}

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

Ответы [ 5 ]

26 голосов
/ 17 июля 2014

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

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
    Log.i(TAG, "onPause, done");
}
12 голосов
/ 16 ноября 2010

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

8 голосов
/ 17 ноября 2010

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

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

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

2 голосов
/ 07 сентября 2016

Я использую: 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);
}
2 голосов
/ 17 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...