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

…衆ロ難τιáo~ 提交于 2019-12-12 10:41:31

问题


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


回答1:


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



回答2:


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.



来源:https://stackoverflow.com/questions/4070260/how-do-i-stop-gps-location-tracking-when-my-activity-finishes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!