我正在使用CLLocationManager
课程。我想定期获取位置更新。我找到了两种方法来获取didUpdateLocations
方法中的位置,即startUpdatingLocation()
和startMonitoringSignificantLocationChanges()
。如果我必须在前台模式中跟踪位置更新,那么我应该使用哪种方法?
答案 0 :(得分:4)
2之间最重要的区别是:
startMonitoringSignificantLocationChanges:它不依赖distanceFilter属性中的值来生成事件。仅当检测到用户位置发生重大变化时,接收器才会生成更新事件
startUpdatingLocation:接收器主要在超出distanceFilter属性值时生成更新事件
因此,如果您想要更高的精度,请选择startUpdatingLocation
,但需要更多的电池消耗,但位置更精确。这实际上取决于你的目标,你应该评估权衡。
答案 1 :(得分:3)
startMonitoringSignificantLocationChanges异步启动位置事件的传递,在您调用之后不久返回。位置事件将传递给您委托的locationManager:didUpdateLocations:方法。要传递的第一个事件通常是最近缓存的位置事件(如果有),但在某些情况下可能是较新的事件。在返回当前位置修复之后,接收器仅在检测到用户位置的显着变化时才生成更新事件。只要设备从之前的通知移动500米或更长时间,应用就会收到通知。
总结startMonitoringSignificantLocationChanges
只会在位置变化大约500米左右或经过一段固定时间(例如5分钟)后才会为您提供位置。 startUpdatingLocation
将根据distanceFilter
属性集为您提供位置的位置。 distanceFilter
的默认值为kCLDistanceFilterNone
,报告所有动作。
startUpdatingLocation立即返回。调用此方法会导致位置管理器获取初始位置修复(可能需要几秒钟),并通过调用其locationManager:didUpdateLocations:方法来通知您的委托。之后,接收器主要在超出distanceFilter属性值时生成更新事件。但是,更新可能会在其他情况下提供。例如,如果硬件收集更准确的位置读数,接收器可以发送另一个通知。