CLLocationManager startUpdatingLocation 与 startMonitoringSignificantLocationChanges

Posted

技术标签:

【中文标题】CLLocationManager startUpdatingLocation 与 startMonitoringSignificantLocationChanges【英文标题】:CLLocationManager startUpdatingLocation vs startMonitoringSignificantLocationChanges 【发布时间】:2011-09-13 19:37:38 【问题描述】:

我正在开发一个 Web 应用程序,该应用程序允许用户登录到该应用程序,前提是他们位于某些特定区域。我在我的应用程序开始时调用了locationManager startUpdatingLocation 以获取用户的位置并启用/禁用登录。

用户登录后,我调用了

[locationManager stopUpdatingLocation];
[locationManager startMonitoringSignificantLocationChanges];

并在更新的位置不在该区域时将用户注销。使用这两种方法会以任何方式发生冲突吗? (我正在模拟器上测试代码,因此位置始终相同)。

注意:我没有使用didEnterRegiondidExitRegion,因为一切都由现有的javascript 代码处理。我只是在用户的当前位置发送。

【问题讨论】:

它们不会发生冲突。我测试了它。您可以安全地运行两者。 【参考方案1】:

这实际上取决于用户登录后您对位置的需求。当您监控重大更改时,您的 locationManager 只会收到重大更改的通知。 (例如,新的手机信号塔、wifi 变化、其他应用程序呼叫位置等)。它不会始终如一。如果您只关心用户登录,我可能会一起取消重要的监控。如果您仍需要位置信息,请准备好仅获取位置信息的零星更新。

【讨论】:

我从startUpdatingLocation 开始,因为当我尝试在应用程序启动时使用startMonitoringSignificantLocationChanges 时,它没有将当前位置发送到我的应用程序。用户登录后,除非用户退出允许登录的区域,否则我不会真正使用该位置,因此我认为监控显着会起作用。我还没有在实际设备上进行测试(并且移动到足以让监控显着通知我任何事情),因为我仍在等待 Apple 批准我成为付费 ios 开发者。 一般来说,如果你在你的应用中是活跃的,你会主动监控位置。监控重要位置是指不需要经常更新位置。就像在后台一样。这有助于延长电池寿命。 如果你只需要监控特定区域,我会建议区域监控的方法。我目前正在使用它们,它们工作得非常好。查看 -startMonitoringForRegion,你应该找到你需要的。 我确实研究了区域监控,但是如果我将当前位置传递给它,我已经有一个现有的代码来检查区域。我更喜欢位置更新而不是区域监控,因此它与其他平台更加一致。谢谢!

以上是关于CLLocationManager startUpdatingLocation 与 startMonitoringSignificantLocationChanges的主要内容,如果未能解决你的问题,请参考以下文章

为啥'CLLocationManager.locationServicesEnabled()'默认为真?

Xcode 6 GM - CLLocationManager

CLLocationManager 和 CLGeoCoder

CLLocationManager:没有调用 didChangeAuthorization 和 didRangeBeacons

CLLocationManager 最后一个已知位置

CLLocationManager 从不调用委托方法[重复]