Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I stop GPS/location tracking when my Activity finishes?

I have a very simple app for Android that displays a Google Maps view and uses the GPS to track the position (essentially like so):

public void onCreate(Bundle savedInstanceState) {
    // ...
    mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    // ...
}

public void onResume() {
    super.onResume();
    mLocationManager.requestLocationUpdates(mProvider, 20000, 1, this);
}

public void onPause() {
    super.onPause();
    mLocationManager.removeUpdates(this);
}

public void onLocationChanged(Location location) {
    mPosition = getGeoPointForLocation(location);
    mMapController.setCenter(mPosition);
}

And when I use the following command to exit the application (e.g. through a menu), the GPS keeps on tracking - it seems that the Activity is still running:

// ...
case R.id.menu_exit:
    finish();
// ...

How do I stop the GPS tracking if it does not work by removing the location manager in onPause() and calling finish()? As far as I have read tutorials or other questions, this should be the solution..

like image 969
slhck Avatar asked Nov 01 '10 15:11

slhck


1 Answers

Are you using MyLocationOverlay? This gives you the pulsating blue dot that represents your current position. I didn't see MyLocationOverlay in your sample code but I'm just double checking.

If you are using MyLocationOverlay...

I've tested the code below: with and without calling "disableMyLocation" when I exit a sample app after pressing an "exit" menu command. When I call "disableMyLocation", the GPS tracking turns off. When I don't call it, the GPS tracking stays on after I call "finish".

    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.quit:

        myLocOverlay.disableMyLocation(); //turn off location
        mlocManager.removeUpdates(this); // no impact on GPS tracking
        finish(); //destroy Android app
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}
like image 180
CircuitBreaker716 Avatar answered Nov 10 '22 03:11

CircuitBreaker716