我正在使用iOS 9 beta 4和watchOS 2 beta 4。
当手表屏幕变黑(锁定)时,我似乎无法获得任何心率数据。我会打电话给applicationWillResignActive
,然后心率数据就会停止。
当屏幕锁定时,传感器似乎在一段时间后停用(不再是绿色)。
其他人看到这种行为?如果有人在手表上的屏幕被锁定时获得心率数据,我可以发布我的代码来启动WorkoutSession。
答案 0 :(得分:4)
从watchOS 3.0开始,您可以将WKBackgroundModes
条目workout-processing
添加到扩展程序的Info.plist中。
来自docs:
在后台运行锻炼课程可以在后台运行。 后台运行授予应用程序以下功能:
该应用程序在整个锻炼过程中继续运行,甚至 当用户降低他们的手腕或与不同的应用程序交互时。 当用户抬起手腕时,应用程序会重新出现,让用户离开 快速轻松地检查他们当前的进度和表现。
该应用程序可以继续从Apple Watch的传感器访问数据 背景,让您随时保持应用程序的最新状态。对于 例如,正在运行的应用可以继续跟踪用户的心率, 确保每当显示最新的心率数据 用户抬起手腕。
答案 1 :(得分:2)
Watch应用程序平台旨在在applicationWillResignActive()之后不久完全禁用您的代码。但是,如果HKWorkoutSession处于活动状态,手表应该在后台记录心率数据到香港商店(只要另一个手表应用程序没有开始新的并取消你的)。
这与我开始心率收集大致相同:
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 :(得分:0)
我注意到了类似的行为,发现第一次锻炼会话会按照预期运行,但后续的锻炼只会在表盘处于活动状态时运行。我通过在会话完成后重置HKWorkoutSession解决了这个问题。