如何检查延迟位置更新是不是有效?
Posted
技术标签:
【中文标题】如何检查延迟位置更新是不是有效?【英文标题】:How can I check if Deferred Location Updates works?如何检查延迟位置更新是否有效? 【发布时间】:2016-04-01 06:37:37 【问题描述】:有没有其他人遇到过告诉位置经理推迟更新但仍通过 didUpdateLocations 获得定期位置更新的问题?
我有:
已验证没有其他应用正在使用定位服务
从调试器和 MacBook 上拔下设备(通过将 didUpdateLocations 记录到文件来验证它是否仍在调用)
确保我的应用中只使用了一个 locationManager。
根据文件日志:
CoreLocation:完成延迟更新:成功
我认为没有什么问题,但 didUpdateLocations 仍然以 1Hz 的正常间隔调用。
如何检查延迟位置更新是否有效?
【问题讨论】:
来自苹果文档:Deferred updates are delivered only when the system enters a low power state. Deferred updates do not occur during debugging because Xcode prevents your app from sleeping and thus prevents the system from entering that low power state.
【参考方案1】:
请务必按照所有steps 设置延迟位置更新。当您在数组有多个位置的didUpdateLocations
上收到回调时,您可以检测它是否有效。
【讨论】:
感谢您的回复。如果获取日志“CoreLocation: Finished deferred updates:success”并以 1s 的间隔一个接一个接收位置是什么意思? 这意味着某些东西阻止了 ios 进入低功耗状态(CPU 暂停)。后台的另一个应用程序或其他东西。 我看到了同样的问题:没有错误(以与 allowDeferredLocationUpdatesUntilTraveled:timeout: 中的超时值相对应的时间间隔报告),但仍然没有延迟更新(而是每秒一次)。我试图杀死所有其他应用程序并禁用我的应用程序内的各种后台任务,但到目前为止没有任何帮助。任何关于究竟是什么可以防止低功耗状态(或如何找到它)的提示将不胜感激。 更新上述评论:我终于发现是什么阻止了我自己的应用程序中的延迟更新:我正在将位置保存到 CoreData 存储中。事实证明这样做是安全的,但不能在 didUpdateLocations 中的 NSManagedObjectContext 上调用 [context save:&error],因为这似乎会阻止 iOS 进入低功耗状态。只在 didFinishDeferredUpdatesWithError 中调用它。以上是关于如何检查延迟位置更新是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
Fused Location Provider:有没有办法检查位置更新是不是失败?