Diego
Diego

Reputation: 4091

How to stop location listeners

I'm trying to get the devices location by getting all listeners:

LocationManager locationManager = (LocationManager) myContext.getApplicationContext()
        .getSystemService(Context.LOCATION_SERVICE);


for (String s : locationManager.getAllProviders()) {

    locationManager.requestLocationUpdates(s, checkInterval,
            minDistance, new LocationListener() {


                @Override
                public void onProviderEnabled(String provider) {

                }

                @Override
                public void onProviderDisabled(String provider) {

                }

                @Override
                public void onLocationChanged(Location location) {
                    // if this is a gps location, we can use it
                    if (location.getProvider().equals(
                            LocationManager.GPS_PROVIDER)) {
                        doLocationUpdate(location, true);
                        stopGPS();
                    }
                }

                @Override
                public void onStatusChanged(String provider,
                        int status, Bundle extras) {
                    // TODO Auto-generated method stub

                }
            });

        gps_recorder_running = true;
}

// start the gps receiver thread
gpsTimer.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        Location location = getBestLocation();
doLocationUpdate(location, false);
if ((System.currentTimeMillis()-startMillis)>maxCheckTime){stopGPS();}

    }
}, 0, checkInterval);

}

The problem comes when I want to stop the Listeners. I tried to cancel the timer:

gpsTimer.cancel();

But it doesn't stop the Listeners. I think I have to use locationManager.removeUpdates, but how do I stop all Listeners?

Thanks

Upvotes: 0

Views: 626

Answers (1)

Justin Breitfeller
Justin Breitfeller

Reputation: 13801

You must keep a list of all the location listeners you register and then call unregister with each of them when you are done. Either that or just reuse the same listener for each call and then unregister it once.

Edit

//Make the following line a field in your class
List<LocationListener> myListeners = new ArrayList<LocationListener>();

for (String s : locationManager.getAllProviders()) {
LocationListener listener = new LocationListener() { .... }; //I'm cutting out the implementation here
myListeners.add(listener);

 locationManager.requestLocationUpdates(s, checkInterval,
            minDistance, listener);
}

Upvotes: 1

Related Questions