gpt4 book ai didi

ios - 在监控重大位置变化时是否可以推迟位置更新?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:24:15 26 4
gpt4 key购买 nike

我正在开发一款应用,用于监控位置的重大变化,以便在后台获取用户的位置。我已经成功实现了 locationManager.startMonitoringSignificantLocationChanges 以及 locationManager:didUpdateLocationslocationManager:didFailWithError 我的 CLLocationManagerDelegate 方法。

但是,SLC 实际上比我需要的更准确。根据 Apple 的文档 - 并由我的测试证实 - slc 大约每 500 米触发一次位置更新,时间间隔为 5 到 10 分钟。因此,我在委托(delegate)的 didUpdateLocations 方法中实现了 locationManager.allowDeferredLocationUpdatesUntilTravelled:timeout,如本指南所述:http://apple.co/1W4gqEJ .

这是我的代码:

var deferringUpdates = false

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
for location in locations {
NSLog("Significant location change recorded:\n%@", location)
}

if let location = locations.first {
let secondsAgo: NSTimeInterval = location.timestamp.timeIntervalSinceNow

// Only process the location if it is very recent (less than 15 seconds old).
if abs(secondsAgo) < 15.0 {
saveExtendedUserInfo(withLocation: location)
}
}

if !deferringUpdates {
manager.allowDeferredLocationUpdatesUntilTraveled(810, timeout: 600)
deferringUpdates = true
NSLog("Deferring location updates...")
}
}

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
NSLog(error.localizedDescription)
}

func locationManager(manager: CLLocationManager,
didFinishDeferredUpdatesWithError error: NSError?)
{
deferringUpdates = false

if let deferralError = error {
NSLog(deferralError.localizedDescription)
}
}

不幸的是,位置管理器从不推迟更新。在 allowDeferredUpdatesUntilTravelled:timeout 被调用后,委托(delegate)立即执行 didFinishDeferredUpdatesWithError 并产生 kCLErrorDomain 12,即 CLError.DeferredNotUpdatingLocation .

为什么会出现该错误?这似乎意味着延迟更新服务不会将监视重大位置更改识别为“更新位置”。是否可以推迟 slc 事件的传递,或者以某种方式降低它们的频率?如果是,怎么办?

最佳答案

延迟更新的目的是节省主 CPU 在处理来自 GPS 的 1 Hz 位置更新时消耗的电池。通过延迟更新,CPU 保持休眠状态以节省电池电量,而 GPS 芯片每秒 (1 Hz) 累积一次 GPS 位置。

对于重大位置变化 (SLC),系统使用 GPS。它根据蜂窝塔三角测量确定位置,在发生重大变化之前不会唤醒 CPU。

这两个功能是互斥的,你不能推迟重大位置变化的更新,因为 GPS 芯片不参与 SLC。

关于ios - 在监控重大位置变化时是否可以推迟位置更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36654275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com