【问题标题】:MyLocationOverlay won't disable location requestsMyLocationOverlay 不会禁用位置请求
【发布时间】:2011-10-12 23:02:49
【问题描述】:

原文: 有没有办法杀死 TabActivity 的子活动。我有一个非常简单的选项卡设置。有两个选项卡。其中一个选项卡包含一个 MapActivity。当我切换到 MapActivity 时,GPS 会打开。当我按回时,TabActivity 退出,但 GPS 仍然打开。在我明确终止应用程序之前,gps 不会关闭。有没有办法从 TabActivity 中杀死 MapActivity?我想在 TabActivity 退出/onBackPressed 时杀死它。

编辑:
我确实尝试在我的 MapActivity 中停止 onDestroy 和 onPause 中的位置请求。我正在使用 MyLocationOverlay 类,并在 onDestroy 方法中调用 disableCompass 和 disableMyLocation。这些方法被调用,但 GPS 保持打开状态。如果我调用 enableMyLocation 并立即调用 disableMyLocation(在 onCreate 期间),gps 将关闭。


编辑标题以反映答案:
原来问题是 MyLocationOverlay 的 enable*/disable* 出现意外行为。这些函数似乎不是幂等的。多次调用启用和禁用不会像预期的那样将其打开一次或关闭一次。确保一次调用启用(在 onResume 中)和一次调用禁用(在 onPause 中)将在退出活动时禁用位置请求。

【问题讨论】:

    标签: android


    【解决方案1】:

    定位服务不能通过停止活动来终止,您应该阅读更多关于定位服务及其运作方式的信息:

    http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

    具体来说,当您向提供商(在您的情况下是 GPS 提供商)请求位置更新时,您应该只在一段时间内请求它,然后您需要拨打电话以停止请求。

    另见: http://developer.android.com/reference/android/location/LocationManager.html

    【讨论】:

    • 我知道需要禁用更新,我的问题已被编辑以包含此信息。
    • 这在你的代码中吗:locationManager.removeUpdates(locationListener);这是至关重要的一行,如果它不在您的代码中,GPS 将继续运行。此外,如果您尝试启用和禁用 GPS 提供程序,由于“安全原因”,您无法执行此操作。
    【解决方案2】:

    最好的办法是覆盖 onStop() 或 onBackPressed() 以停止 GPS。当您在其中一个活动中时,您可以选择调用 getParent() 以返回选项卡活动,作为附注。

    【讨论】:

      【解决方案3】:

      事实证明,多次调用 MyLocationOverlay.enable*()(我调用了两次)即使您多次调用 MyLocationOverlay.disable*() 也会使 GPS 保持开启状态。至少,这是我观察到的行为。我希望启用和禁用是幂等的,但事实并非如此。 Related problem

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 2017-11-08
        • 2019-10-31
        • 2014-11-17
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        相关资源
        最近更新 更多