6

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

slhck
  • 36,575
  • 28
  • 148
  • 201
  • 1
    The command removeUpdates is correct. Generally it'd be better to override onFinish() and remove the updates in there. This way you're safer in case the activity gets destroyed in some other way than the exit button. But since you register the locationUpdates in onResume, wouldn't it make even more sense to remove the updates in onPause()? – Mathias Conradt Nov 01 '10 at 15:47
  • 1
    btw - not directly related to your question: for more enhanced functionality later, if you want to have the app working indoor and outdoor and more precise, take a look at this post: http://stackoverflow.com/questions/3145089/what-is-the-simplest-and-most-robust-way-to-get-the-users-current-location-in-an/3145655#3145655 – Mathias Conradt Nov 01 '10 at 15:49
  • I moved it to `onPause()` (see original post), but still the GPS symbol keeps flashing when I exit the app. Thanks for the link, I will check that! – slhck Nov 01 '10 at 15:53
  • @shlck: The GPS icon is not removed in the Android emulator. – CommonsWare Nov 01 '10 at 19:54
  • I'm using a real phone (HTC Desire on 2.2) – slhck Nov 01 '10 at 19:58

2 Answers2

8

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);
    }
}
  • This is really it. I was using the Location Overlay -- thank you very much for your help. – slhck Jun 16 '11 at 21:30
  • 2
    No problem. The code above was just an example: the best place to put the "disableMyLocation" call is in the "OnPause" event. Then call "enableMyPosition" in the "OnResume" event. – CircuitBreaker716 Jun 19 '11 at 17:51
  • Yup, I had it in `onCreate()` but no counterpart for it. – slhck Jun 19 '11 at 17:52
0

Are you sure you are not entering again in the Activity? Are you sure you are actually stopping the GPS? Try to make a timer that after 2 seconds calls mLocationManager.removeUpdates(this), just to make sure you can actually stop it. You can also check if your activity is paused.

Rui Peres
  • 25,741
  • 9
  • 87
  • 137