gpt4 book ai didi

ios - 在后台运行时测量 iPhone 高度

转载 作者:行者123 更新时间:2023-11-30 12:14:07 25 4
gpt4 key购买 nike

我正在使用 Swift 编写一个 iPhone 应用程序,用于跟踪飞机的起飞和降落(通过气压变化来指示)。

为此,我需要测量 iPhone 在后台运行时的气压。我需要在一两个小时内至少每分钟测量一次压力。我已阅读 Apple Developer Background Execution guide ,但我认为任何背景模式都不相关;例如,有限长度的任务持续时间不够长,而获取任务似乎太不频繁。

我当前获取气压的代码如下:

let opQueue = OperationQueue.current!
opQueue.qualityOfService = .background
altimeter.startRelativeAltitudeUpdates(to: opQueue) { (data, error) in
print ("Pressure returned")
//If pressure returned from iPhone correctly:
if let data = data {
self.localPressure = convertPressure(data.pressure.doubleValue, fromUnit: .kPa, toUnit: .hPa) //In hPa
}
}

我已将此 operationQueueQoS 更改为 .background,但据我了解,这只会使其优先级降低获得更新并且与作为后台执行运行无关(正确吗?)。

还有什么我可以尝试在后台执行下定期获取气压吗?我无法想象每分钟左右获取气压会消耗巨大的电力,所以我希望这是可能的。

任何可用的帮助将不胜感激!

谢谢

最佳答案

你是对的,cos OperationQueue 的属性仅更改其优先级,将其设置为 background不会让您的应用程序在后台运行。

至于在后台获取海拔高度数据,您应该使用CoreLocation库而不是 CoreMotion并使用后台位置更新。

你必须让你的类符合 CLLocationManagerDelegate ,启动位置更新,然后实现以下委托(delegate)方法:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let currentLocation = locations.last else { return }
let altitude = currentLocation.altitude
//use altitude to check whether plane is taking off or landing
}

在幕后,系统很可能正在使用 CMAltimeter获取海拔数据,但没有 API 可以在后台获取它,因此您必须使用 CoreLocation .

关于ios - 在后台运行时测量 iPhone 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635852/

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