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

StackOverflow https://stackoverflow.com/questions/4197478

  •  11-10-2019
  •  | 
  •  

Вопрос

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

Я называю startGPS () в Methode Oncreate в одном действию (только одно, позвольте мне назвать это 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();
 }
}

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Я вижу, что прошло много времени с этого поста, но, возможно, это поможет какому -то телу. Я использую: removeUpdates (это), потому что мой слушатель, это деятельность, в котором я внедряю DE 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top