【问题标题】:HKWorkoutSession: Not getting Heart Rate when screen is turned off in watchOS 2HKWorkoutSession:在 watchOS 2 中关闭屏幕时无法获取心率
【发布时间】:2015-10-28 02:55:06
【问题描述】:
我正在使用 iOS 9 beta 4 和 watchOS 2 beta 4。
当手表屏幕变黑(锁定)时,我似乎无法获取任何心率数据。我会接到applicationWillResignActive 的电话,然后心率数据就会停止。
当屏幕锁定时,传感器似乎也在一段时间后停用(不再是绿色)。
还有其他人看到这种行为吗?如果其他人在手表屏幕锁定时获取心率数据,我可以发布我的代码以启动 WorkoutSession。
【问题讨论】:
标签:
ios
watchkit
apple-watch
healthkit
watchos-2
【解决方案1】:
手表应用平台旨在在 applicationWillResignActive() 之后立即完全禁用您的代码。然而,当 HKWorkoutSession 处于活动状态时,手表应在后台将心率数据记录到 HK 商店(只要另一个手表应用程序没有启动新应用程序并取消您的应用程序)。
这就是我开始收集心率的大致步骤:
func startCollectingHR(){
guard workoutSession == nil else{return} // Make sure it's not already started
// Also make sure you get the appropriate HealthKit permissions
workoutSession = HKWorkoutSession(activityType: HKWorkoutActivityType.CrossTraining, locationType: HKWorkoutSessionLocationType.Outdoor)
workoutSession!.delegate = self
healthStore.startWorkoutSession(workoutSession!)
print("HR collection started.")
}
不幸的是,我还没有找到任何方法让心率在手表上 HealthKit 商店以外的任何地方可靠地实时流式传输。
【解决方案2】:
我注意到类似的行为,并发现第一次锻炼会按预期运行,但随后的锻炼只会在表盘处于活动状态时运行。会话完成后,我通过重置 HKWorkoutSession 解决了这个问题。
【解决方案3】:
从 watchOS 3.0 开始,您可以将带有 workout-processing值的 WKBackgroundModes 条目添加到扩展程序的 Info.plist。
来自docs:
在后台运行 锻炼课程可以在后台运行。
后台运行赋予应用以下能力:
该应用程序会在整个锻炼过程中继续运行,即使
当用户放下手腕或与不同的应用程序交互时。
当用户抬起手腕时,应用程序重新出现,让用户
快速轻松地检查他们当前的进度和表现。
应用程序可以继续访问 Apple Watch 传感器中的数据
背景,让您始终保持应用程序最新。为了
例如,一个正在运行的应用程序可以继续跟踪用户的心率,
确保随时显示最新的心率数据
用户抬起手腕。