如何使 HKworkoutsession 始终是一个积极的锻炼课程

Posted

技术标签:

【中文标题】如何使 HKworkoutsession 始终是一个积极的锻炼课程【英文标题】:How to make HKworkoutsession always an active workout session 【发布时间】:2015-07-14 17:34:41 【问题描述】:

我正在开发 Apple Watch 应用,我正在使用 HKworkoutsession 访问心率数据样本。

在最新的 watchos2 beta3 版本中出现错误“在活动锻炼期间,屏幕关闭时不会生成新的心率样本。”是固定的。

我的问题是如何将我的 HKworkoutsession 始终设置为“主动锻炼”,以便我可以根据需要不断获取心率样本。

谢谢 瑞恩

【问题讨论】:

更具体地说,当我倾斜手表时,屏幕会关闭,程序会挂起。当我向后倾斜时,屏幕打开,HKworkout session 在这个时间点将首先切换到“.Ended”,然后切换到“.Running”。如何防止这种情况发生并保持会话始终“.Running” 听起来像是 HealthKit 的错误,您应该向 Apple 报告。 @user3781258 此事有进展吗? 可能与***.com/questions/31224611/…重复 【参考方案1】:

以下代码是如何开始或停止锻炼。

let healthStore = HKHealthStore()
healthStore.startWorkoutSession(workoutSession) 
  (result: Bool, error: NSError?) -> Void in


healthStore.stopWorkoutSession(workoutSession) 
  (result: Bool, error: NSError?) -> Void in

有 HKWorkoutSessionDelegate 通知其会话状态。

protocol HKWorkoutSessionDelegate : NSObjectProtocol 

func workoutSession(workoutSession: HKWorkoutSession,
  didChangeToState toState: HKWorkoutSessionState,
  fromState: HKWorkoutSessionState, date: NSDate)

func workoutSession(workoutSession: HKWorkoutSession,
  didFailWithError error: NSError)

[编辑] 2015/08/31

ObjC 版本

HKWorkoutSession *workoutSession = [[HKWorkoutSession alloc] initWithActivityType:HKWorkoutActivityTypeRunning locationType:HKWorkoutSessionLocationTypeOutdoor];
workoutSession.delegate = self;

HKHealthStore *healthStore = [HKHealthStore new];
[healthStore startWorkoutSession:workoutSession];

[healthStore stopWorkoutSession:workoutSession];

HKWrokoutSessionDelegate

- (void)workoutSession:(HKWorkoutSession *)workoutSession
  didChangeToState:(HKWorkoutSessionState)toState
         fromState:(HKWorkoutSessionState)fromState
              date:(NSDate *)date;

- (void)workoutSession:(HKWorkoutSession *)workoutSession didFailWithError:(NSError *)error;

注意:最新版本的方法名称有变化,请注意 OS 2 beta 5。

stopWorkoutSession 已更改为 endWorkoutSession。

【讨论】:

你能把你的例子翻译成Objective C吗? 我使用 Objective-C 代码进行了编辑。请看一看! 我有类似的代码,但仍然看到问题中描述的行为。 首先,它不适用于iPhone模拟器。其次,它应该被授予访问包含 ios 应用程序上的 HealthKit 的权限。第三,您应该使用 HKAnchoredObjectQuery 来接收心率数据的更新。

以上是关于如何使 HKworkoutsession 始终是一个积极的锻炼课程的主要内容,如果未能解决你的问题,请参考以下文章

当watchOS应用程序使用HKWorkoutSession在后台运行时如何使WCSession可访问

HKWorkoutSession 不可用

HealthKit - 在 HKWorkoutSession 期间更改 HKWorkoutConfiguration?

HealthKit - 在 HKWorkoutSession 期间更改 HKWorkoutConfiguration?

为啥我的 HKWorkoutSession(通常)没有结束?

为啥我的 HKWorkoutSession(通常)没有结束?