【问题标题】:How to tell if CLLocationManager is Monitoring Significant Location Changes如何判断 CLLocationManager 是否正在监控重大的位置变化
【发布时间】:2015-04-18 19:52:03
【问题描述】:

我正在更新一个应用程序,该应用程序使用 CLLocationManager 监控用户位置的重大变化。我允许用户打开或关闭此选项,适当地设置 startMonitoringSignificantLocationChanges 和 stopMonitoringSignificantLocationChanges。

问题是当用户重新打开应用程序时,我需要知道应用程序当前是否正在监视重要位置,以便相应地设置此切换的当前状态。

有什么我可以在 CLLocationManager 或其他地方检查的东西,告诉我监控当前是打开还是关闭。

【问题讨论】:

    标签: mapkit core-location cllocationmanager


    【解决方案1】:

    部分由于对 CLLocationManager 的这种烦人的限制,我最终放弃了使用显着位置更改来支持监控区域。这样做的好处是比在蜂窝塔发生变化时随机获取位置要准确得多,而且不会大量耗尽电池,但更重要的是,您可以询问位置管理器它当前正在监视哪些区域,从而确定它是打开还是关闭.

    您可以按照与重大位置更改相同的方式使用它,因为您可以设置一个以您当前位置为半径的区域,然后在您的 didExitRegion 回调中,获取正确的 GPS 信号并从中使用位置。

    【讨论】:

      【解决方案2】:

      在 iOS 8 中,您可以检查您从用户那里获得的当前权限。如果用户授予您Always 权限,则意味着他们允许重大的位置更改。如果他们只允许WhenInUse,他们不允许重大的位置更改。请参阅this post,了解有关您在这两个位置权限上获得的详细信息。

      在 iOS 8 之前,我不相信有办法说明这一点。用户可以允许您使用他们的位置,也可以不允许。因此,您需要自己跟踪位置管理器的当前状态(即,当您调用startMonitoringSignificantLocationChanges 时,NSUserDefaults 中的BOOL 会更改为YES,并在您调用时将其设置为NO stopMonitoringSignificantLocationChanges)。

      【讨论】:

        猜你喜欢
        • 2012-06-11
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-13
        • 1970-01-01
        • 2013-07-04
        相关资源
        最近更新 更多