【问题标题】:How do I stop GPS/location tracking when my Activity finishes?当我的活动结束时,如何停止 GPS/位置跟踪?
【发布时间】:2010-11-01 15:22:59
【问题描述】:

我有一个非常简单的 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);
}

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

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

如果通过删除onPause() 中的位置管理器并调用finish() 不起作用,我该如何停止GPS 跟踪?据我阅读教程或其他问题,这应该是解决方案..

【问题讨论】:

  • 命令 removeUpdates 是正确的。通常最好覆盖 onFinish() 并删除那里的更新。这样,如果活动以退出按钮以外的其他方式被破坏,您会更安全。但是既然你在 onResume 中注册了 lo​​cationUpdates,那么在 onPause() 中删除更新不是更有意义吗?
  • 顺便说一句 - 与您的问题没有直接关系:以后要获得更多增强的功能,如果您想让应用程序在室内和室外工作并且更精确,请查看此帖子:stackoverflow.com/questions/3145089/…跨度>
  • 我已将其移至onPause()(请参阅原帖),但当我退出应用程序时,GPS 符号仍持续闪烁。谢谢你的链接,我会检查的!
  • @shlck: GPS 图标在 Android 模拟器中没有被移除。
  • 我使用的是真机(HTC Desire on 2.2)

标签: android android-activity gps


【解决方案1】:

您在使用 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);
    }
}

【讨论】:

  • 真的是这样。我正在使用位置叠加 - 非常感谢您的帮助。
  • 没问题。上面的代码只是一个示例:调用“disableMyLocation”的最佳位置是在“OnPause”事件中。然后在“OnResume”事件中调用“enableMyPosition”。
  • 是的,我在onCreate() 有它,但没有对应的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2016-11-14
    • 2016-07-01
    相关资源
    最近更新 更多