web-dev-qa-db-fra.com

Comment arrêter le gestionnaire de localisation?

Je ne sais pas pourquoi, mais parfois LocationManager fonctionne toujours après la fermeture de l'application.

J'appelle startGPS () dans onCreate-Methode en une seule activité (une seule, permettez-moi de l'appeler 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();
 }
}

Et si cette activité sera détruite (donc, quand l'application sera fermée), j'appelle endGPS ()

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

Quelques idées, quelques suggestions, qu'ai-je fait de mal?!

34
Tima

Est-il possible que votre activité ne soit pas détruite? c'est-à-dire: vous appuyez sur le bouton d'accueil. Déplacez votre gps start/stop vers onStart et onPause.

12
Nathan Schwermann

Vous devez appeler la méthode removeUpdates à l'intérieur de la méthode onPause:

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

L'émulateur ne se débarrasse jamais de l'icône GPS une fois chargé. Par conséquent, sur un émulateur, vous ne pouvez pas utiliser l'icône GPS comme test pour savoir si le GPS fonctionne toujours. Sur un appareil, cependant, l'icône devrait disparaître.

Dois-je utiliser deux écouteurs différents?

Je le ferais certainement. Je ne sais pas si removeUpdates() supprimera les deux, ou même si les deux requêtes sont enregistrées avec le seul écouteur.

8
CommonsWare

J'utilise: locationManager.removeUpdates (locationListener); Ça marche

    @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);
}
4
Sabari Esh

Je vois que ça fait un moment depuis ce post, mais peut-être que ça aiderait un autre corps. J'utilise: removeUpdates (this), parce que mon auditeur c'est l'activité où j'implémente de location manager, vous devez indiquer votre auditeur.

2
Alex