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

slh*_*hck 6 gps android android-activity

我有一个非常简单的Android应用程序,它显示谷歌地图视图并使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

// ...
case R.id.menu_exit:
    finish();
// ...
Run Code Online (Sandbox Code Playgroud)

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

Cir*_*716 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 没问题.上面的代码只是一个例子:放置"disableMyLocation"调用的最佳位置是"OnPause"事件.然后在"OnResume"事件中调用"enableMyPosition". (2认同)