我正在使用CMMotionManager和HKWorkoutSession处理apple watch app,以获取加速度计和心率数据。该应用程序可以在短时间内(70秒)正常工作,但是当屏幕关闭时,心率和加速度计数据都会停止。
我的问题是如何从加速度计和心率传感器获取5分钟数据?
答案 0 :(得分:4)
要将应用转到后台需要更多时间,您可以使用performExpiringActivityWithReason
。这里描述https://developer.apple.com/videos/play/wwdc2015/228/?time=345在我看来它只需要大约30秒
NSProcessInfo.processInfo().performExpiringActivityWithReason("Reason") {
expired in
if !expired {
let delay: Int64 = 30
let delayTime = dispatch_time(DISPATCH_TIME_NOW, delay * Int64(NSEC_PER_SEC))
dispatch_semaphore_wait(semaphore, delayTime)
} else {
dispatch_semaphore_signal(semaphore)
}
}
答案 1 :(得分:3)
自watchOS 2发布以来,HKWorkoutSession是在手表屏幕关闭时让应用程序保持运行的唯一方法。但是,该应用程序处于暂停状态。定时器和任何其他进程执行暂停,直到屏幕重新打开。但是,应用程序的内存分配仍然保留。在应用程序暂停期间,设备的硬件仍在收集数据并将其存储在手表的硬盘上。当屏幕重新打开时,应用程序将停止运行,硬件收集的任何数据将在此时返回给应用程序(假设订阅了相应的侦听器)。
目前没有办法在屏幕关闭后继续从手表向iPhone发送心率数据(或任何数据)。
答案 2 :(得分:1)
watchOS 2不允许应用在屏幕关闭时运行。虽然有一些方法可以让你有一些额外的时间,例如使用performExpiringActivityWithReason
,但是无法确保你的应用程序运行整整5分钟。
答案 3 :(得分:1)
现在,Apple打开用于记录您的Accel数据的API点击:CMSensorRecorder 。每当您的应用程序被暂停或终止时,API将在50Hz内持续运行近3天。