How to disable Android LocationListener when application is closed

I have a class that processes the location service MyLocationManager.java

this is the code:

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 } } } 

which has an Inner class that implements a location receiver on it. While this is working. Listen to this place without any problems. However, when I exit my applications, it does not completely stop listening to the location. As you can see from this code:

 @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(); } 

while the location is being updated, the toast will be displayed, and it still appears when the location is being updated. Even when I closed the application.

How to stop the location listener completely in my case.

This helped me stop the update:

android how to stop gps

+7
source share
1 answer

You can call removeUpdates in your LocationManager.

public void removeUpdates (intent PendingIntent)

Deletes any current registrations for location updates of the current activity with this pending. After this call, updates will no longer occur for this intention.

Options:

An object

intent {#link PendingIntent}, which no longer needs Update locations

Throws:

IllegalArgumentException if target is null

See here: http://developer.android.com/reference/android/location/LocationManager.html#removeUpdates (android.app.PendingIntent)

Updated:

In this case, you can change this line:

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

in

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

If you want to remove the listener call, as shown below:

 locationManager.removeUpdates(myLL); 
+15
source

All Articles