为什么 didUpdateLocations: 在 locationManager DidResumeLocation Updates 之后只有一个位置:
Why does didUpdateLocations: only have one location after locationManagerDidResumeLocationUpdates:
我在 iOS8 中使用定位服务。
设置为 kCLLocationAccuracyBest
,使用 startMonitoringSignificantLocationChanges
在后台重新启动,startUpdatingLocation
用于准确性。
当我设置 pausesLocationUpdatesAutomatically = YES
时,定位服务会按预期暂停和恢复。但是,下面对 didUpdateLocations:
的调用只有一个位置。
我原本希望收到 OS 在传送暂停时收到的一堆位置信息。我在这里错过了什么吗?跟deferredLocationUpdatesAvailable
有关系吗?
这个 answer 在 Apple Dev Forum 上讨论了一个 post,但是我在搜索 pausesLocationUpdatesAutomatically
时什么也没有得到。
请注意:此问题与调用requestAlwaysAuthorization
或在info.plist
中设置提示无关。
当您暂停位置更新时,系统认为您暂时不需要该位置。恢复它只会给你当前位置。
这是正常现象。
...
进一步回答
pausesLocationUpdatesAutomatically
的文档指出:
Allowing the location manager to pause updates can improve battery life on the target device without sacrificing location data.
这是高度误导。
真正的意思是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:
的文档指出:
If updates were deferred or if multiple locations arrived before they could be delivered, the array may contain additional entries.
这是相当清楚的,但它可以声明它与 pausesLocationUpdatesAutomatically
.
无关,不应混淆
我在 iOS8 中使用定位服务。
设置为 kCLLocationAccuracyBest
,使用 startMonitoringSignificantLocationChanges
在后台重新启动,startUpdatingLocation
用于准确性。
当我设置 pausesLocationUpdatesAutomatically = YES
时,定位服务会按预期暂停和恢复。但是,下面对 didUpdateLocations:
的调用只有一个位置。
我原本希望收到 OS 在传送暂停时收到的一堆位置信息。我在这里错过了什么吗?跟deferredLocationUpdatesAvailable
有关系吗?
这个 answer 在 Apple Dev Forum 上讨论了一个 post,但是我在搜索 pausesLocationUpdatesAutomatically
时什么也没有得到。
请注意:此问题与调用requestAlwaysAuthorization
或在info.plist
中设置提示无关。
当您暂停位置更新时,系统认为您暂时不需要该位置。恢复它只会给你当前位置。
这是正常现象。
pausesLocationUpdatesAutomatically
的文档指出:
Allowing the location manager to pause updates can improve battery life on the target device without sacrificing location data.
这是高度误导。
真正的意思是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:
的文档指出:
If updates were deferred or if multiple locations arrived before they could be delivered, the array may contain additional entries.
这是相当清楚的,但它可以声明它与 pausesLocationUpdatesAutomatically
.