如何使 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可访问
HealthKit - 在 HKWorkoutSession 期间更改 HKWorkoutConfiguration?
HealthKit - 在 HKWorkoutSession 期间更改 HKWorkoutConfiguration?