HKWorkoutSession:在watchOS 2中关闭屏幕时未获得心率

时间:2015-08-05 11:03:31

标签: ios watchkit apple-watch health-kit watch-os-2

我正在使用iOS 9 beta 4和watchOS 2 beta 4。

当手表屏幕变黑(锁定)时,我似乎无法获得任何心率数据。我会打电话给applicationWillResignActive,然后心率数据就会停止。

当屏幕锁定时,传感器似乎在一段时间后停用(不再是绿色)。

其他人看到这种行为?如果有人在手表上的屏幕被锁定时获得心率数据,我可以发布我的代码来启动WorkoutSession。

3 个答案:

答案 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解决了这个问题。