Как остановить location manager?

не знаю почему, но иногда 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 ответов


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


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

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

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

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

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


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


Я использую: 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);
}