我的活动完成后如何停止GPS /位置跟踪?

时间:2010-11-01 15:22:59

标签: android android-activity gps

我有一个非常简单的Android应用程序,可以显示Google地图视图并使用GPS跟踪位置(基本上就是这样):

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

当我使用以下命令退出应用程序时(例如通过菜单), GPS继续跟踪 - 似乎活动仍在运行:

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

如果通过移除onPause()中的位置管理器并致电finish(),如果无效,请如何停止GPS跟踪?至于我阅读过教程或其他问题,这应该是解决方案..

2 个答案:

答案 0 :(得分:7)

您使用的是MyLocationOverlay吗?这为您提供了代表您当前位置的脉动蓝点。我没有在你的示例代码中看到MyLocationOverlay,但我只是仔细检查。

如果您正在使用MyLocationOverlay ...

我已经测试了下面的代码:在按下“退出”菜单命令后退出示例应用程序时,有没有调用“disableMyLocation”。当我调用“disableMyLocation”时,GPS跟踪将关闭。当我没有打电话时,我跟“完成”后GPS跟踪保持打开状态。

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

答案 1 :(得分:0)

您确定没有再次进入活动吗?你确定你实际上正在停止GPS吗?尝试制作一个计时器,在2秒后调用mLocationManager.removeUpdates(this),只是为了确保你可以实际停止它。您还可以检查您的活动是否已暂停。