CLLocationManager startUpdatingLocation 与 startMonitoringSignificantLocationChanges
Posted
技术标签:
【中文标题】CLLocationManager startUpdatingLocation 与 startMonitoringSignificantLocationChanges【英文标题】:CLLocationManager startUpdatingLocation vs startMonitoringSignificantLocationChanges 【发布时间】:2011-09-13 19:37:38 【问题描述】:我正在开发一个 Web 应用程序,该应用程序允许用户登录到该应用程序,前提是他们位于某些特定区域。我在我的应用程序开始时调用了locationManager startUpdatingLocation
以获取用户的位置并启用/禁用登录。
用户登录后,我调用了
[locationManager stopUpdatingLocation];
[locationManager startMonitoringSignificantLocationChanges];
并在更新的位置不在该区域时将用户注销。使用这两种方法会以任何方式发生冲突吗? (我正在模拟器上测试代码,因此位置始终相同)。
注意:我没有使用didEnterRegion
或didExitRegion
,因为一切都由现有的javascript 代码处理。我只是在用户的当前位置发送。
【问题讨论】:
它们不会发生冲突。我测试了它。您可以安全地运行两者。 【参考方案1】:这实际上取决于用户登录后您对位置的需求。当您监控重大更改时,您的 locationManager 只会收到重大更改的通知。 (例如,新的手机信号塔、wifi 变化、其他应用程序呼叫位置等)。它不会始终如一。如果您只关心用户登录,我可能会一起取消重要的监控。如果您仍需要位置信息,请准备好仅获取位置信息的零星更新。
【讨论】:
我从startUpdatingLocation
开始,因为当我尝试在应用程序启动时使用startMonitoringSignificantLocationChanges
时,它没有将当前位置发送到我的应用程序。用户登录后,除非用户退出允许登录的区域,否则我不会真正使用该位置,因此我认为监控显着会起作用。我还没有在实际设备上进行测试(并且移动到足以让监控显着通知我任何事情),因为我仍在等待 Apple 批准我成为付费 ios 开发者。
一般来说,如果你在你的应用中是活跃的,你会主动监控位置。监控重要位置是指不需要经常更新位置。就像在后台一样。这有助于延长电池寿命。
如果你只需要监控特定区域,我会建议区域监控的方法。我目前正在使用它们,它们工作得非常好。查看 -startMonitoringForRegion,你应该找到你需要的。
我确实研究了区域监控,但是如果我将当前位置传递给它,我已经有一个现有的代码来检查区域。我更喜欢位置更新而不是区域监控,因此它与其他平台更加一致。谢谢!以上是关于CLLocationManager startUpdatingLocation 与 startMonitoringSignificantLocationChanges的主要内容,如果未能解决你的问题,请参考以下文章
为啥'CLLocationManager.locationServicesEnabled()'默认为真?
Xcode 6 GM - CLLocationManager
CLLocationManager 和 CLGeoCoder
CLLocationManager:没有调用 didChangeAuthorization 和 didRangeBeacons