为什么didUpdateLocations:在locationManagerDidResumeLocationUpdates之后只有一个位置:

时间:2015-06-17 06:21:52

标签: ios8 cllocationmanager

我在iOS8中使用位置服务。

设置为kCLLocationAccuracyBeststartMonitoringSignificantLocationChanges在后​​台重新启动,startUpdatingLocation为准确。

当我设置pausesLocationUpdatesAutomatically = YES时,位置服务会暂停并按预期恢复。但是,以下对didUpdateLocations:的调用只包含一个位置。

我希望在交付暂停时收到操作系统收到的一堆位置。我在这里错过了什么吗?它与deferredLocationUpdatesAvailable有什么关系吗?

这篇answer讨论了关于Apple Dev Forum的帖子,但在搜索pausesLocationUpdatesAutomatically时我什么都没得到。

请注意:此问题与调用requestAlwaysAuthorization或在info.plist中设置提示无关。

2 个答案:

答案 0 :(得分:4)

Quentin Hayot之后的答案......

pausesLocationUpdatesAutomatically州的文档:

  

允许位置管理器暂停更新可以延长目标设备的电池寿命,而不会牺牲位置数据。

极具误导性

它的真正含义是when location manager pauses it will sacrifice location data: the app does not get and never will get location updates until the location manager resumes

应该说明已暂停位置更新与延迟位置更新完全不同。

为了延长电池续航时间,应用应拨打allowDeferredLocationUpdatesUntilTraveled:timeout:,这会提供所有位置更新,同时推迟到locationManager:didUpdateLocations:

locationManager:didUpdateLocations:州的文档:

  

如果延迟更新或者在交付之前多个位置已到达,则阵列可能包含其他条目。

这是相当清楚的,但它可以说它与pausesLocationUpdatesAutomatically没有任何关系,也不应该与它混淆。

答案 1 :(得分:2)

暂停位置更新后,系统会认为您暂时不需要该位置。恢复它只会给你当前的位置 这是正常行为。