Cómo deshabilitar Android LocationListener cuando se cierra la aplicación

Tengo una clase que maneja un servicio de ubicación llamado MyLocationManager.java

Este es el código:

package com.syariati.childzone; import java.util.List; import java.util.Locale; import android.content.Context; import android.location.Address; import android.location.Criteria; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.Toast; public class MyLocationManager { private Context context; private double myLat = 0.0; private double myLon = 0.0; private LocationManager locationManager = null; private Location location = null; private Criteria criteria; private String locationName = null; public MyLocationManager(Context ctx) { this.context = ctx; } private String setCriteria() { this.criteria = new Criteria(); this.criteria.setAccuracy(Criteria.ACCURACY_FINE); this.criteria.setAltitudeRequired(false); this.criteria.setBearingRequired(false); this.criteria.setCostAllowed(true); this.criteria.setPowerRequirement(Criteria.POWER_LOW); return locationManager.getBestProvider(criteria, true); } public double getMyLatitude() { return this.myLat; } public double getMyLongitude() { return this.myLon; } public String getLocation() { return this.locationName; } public void onLocationUpdate() { locationManager = (LocationManager) context .getSystemService(Context.LOCATION_SERVICE); String provider = setCriteria(); location = locationManager.getLastKnownLocation(provider); updateWithNewLocation(location); locationManager.requestLocationUpdates(provider, 1000, 0, new MyLocationListener()); } private void updateWithNewLocation(Location location) { if (location != null) { this.myLat = location.getLatitude(); this.myLon = location.getLongitude(); // Toast.makeText(this.context, // "Lokasi Anda:\n" + this.myLat + "\n" + this.myLon, // Toast.LENGTH_LONG).show(); getLocationName(this.myLat, this.myLon); } else { Toast.makeText(this.context, "Lokasi Anda Tidak Diketahui", Toast.LENGTH_SHORT).show(); } } private void getLocationName(double lat, double lon) { Geocoder geocoder = new Geocoder(context, Locale.getDefault()); try { List<Address> adresses = geocoder.getFromLocation(lat, lon, 1); StringBuilder sb = new StringBuilder(); if (adresses.size() > 0) { Address address = adresses.get(0); for (int i = 0; i < address.getMaxAddressLineIndex(); i++) sb.append(address.getAddressLine(i)).append("\n"); sb.append(address.getCountryName()).append("\n"); } this.locationName = sb.toString(); // Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); } } private class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location newLocation) { // TODO Auto-generated method stub myLat = newLocation.getLatitude(); myLon = newLocation.getLongitude(); getLocationName(myLat, myLon); Toast.makeText(context, "Lokasi terupdate\nLat: " + myLat + "\nLon: " + myLon, Toast.LENGTH_SHORT).show(); } @Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { // TODO Auto-generated method stub } } } 

Que tiene una clase interna que implementa el oyente de localización en él. Hasta ahora, funciona. Escuchar la ubicación sin ningún problema. Sin embargo, cuando salgo de mis aplicaciones, no detiene completamente la escucha de la ubicación. Como se puede ver en este código:

 @Override public void onLocationChanged(Location newLocation) { // TODO Auto-generated method stub myLat = newLocation.getLatitude(); myLon = newLocation.getLongitude(); getLocationName(myLat, myLon); Toast.makeText(context, "Lokasi terupdate\nLat: " + myLat + "\nLon: " + myLon, Toast.LENGTH_SHORT).show(); } 

Mientras se actualiza la ubicación, se mostrará el brindis y aparecerá cuando se actualice la ubicación. Incluso cuando he cerrado la aplicación.

Cómo parar el oyente de la localización totalmente en mi caso.

Este me ayudó a detener la actualización:

Android cómo detener gps

One Solution collect form web for “Cómo deshabilitar Android LocationListener cuando se cierra la aplicación”

Puede llamar a removeUpdates en su LocationManager.

Public void removeUpdates (PendingIntent intención)

Elimina cualquier registro actual de actualizaciones de ubicación de la actividad actual con el PendingIntent dado. Después de esta llamada, las actualizaciones ya no se producirán para esta intención.

Parámetros:

Intent {#link PendingIntent} objeto que ya no necesita actualizaciones de ubicación

Tiros:

IllegalArgumentException si la intención es nula

Vea aquí: http://developer.android.com/reference/android/location/LocationManager.html#removeUpdates(android.app.PendingIntent)

Actualizado:

En este caso, puede cambiar esta línea:

 locationManager.requestLocationUpdates(provider, 1000, 0, new MyLocationListener()); 

a:

 MyLocationListener myLL = new MyLocationListener(); locationManager.requestLocationUpdates(provider, 1000, 0, myLL); 

Cuando desee eliminar su llamada de escucha como se indica a continuación:

 locationManager.removeUpdates(myLL); 
  • Android play services 6.5: LocationClient falta
  • Cómo obtener el número de satélites del objeto Ubicación
  • ¿Cómo puedo decidir qué intervalo usar para requestLocationUpdates?
  • ¿Cómo obtener la dirección completa desde la latitud y la longitud?
  • Android - Obtener ubicación sólo una vez
  • ¿Cuál es la diferencia para obtener la ubicación utilizando el Administrador de ubicaciones y el Proveedor de ubicaciones fusionadas Api?
  • ¿Cómo encontrar el grado del valor de la latitud en android?
  • Google Maps API V2 Zoom a la ubicación actual
  • La API de ubicación más precisa de Android
  • Android - LocationManager vs FusedLocation
  • La API de localización de servicios de Google Play / setSmallestDisplacement no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.