【发布时间】:2020-06-10 10:26:29
【问题描述】:
我正在为 Apple Watch 构建跑步锻炼,但在实现“自动暂停”功能时遇到了问题。
HKWorkoutSessionDelegate : workoutSession(_:didGenerate:) 委托应该得到系统生成的一些暂停事件。
我遇到的问题是我的会话永远不会开始:暂停事件会立即发送给委托。
我的代码:
func workoutSession(_ workoutSession: HKWorkoutSession, didGenerate event: HKWorkoutEvent) {
// press 2 buttons
if(event.type == HKWorkoutEventType.pauseOrResumeRequest) {
print("Detected Press")
if workoutData.isPaused == false {
pauseWorkout()
}
else {
resumeWorkout()
}
}
// Auto-pause
if event.type == HKWorkoutEventType.motionPaused && workoutSettings.autoPause {
print("Auto Pause")
pauseWorkout()
}
if event.type == HKWorkoutEventType.motionResumed && workoutSettings.autoPause {
print("Auto Resume")
resumeWorkout()
}
}
问题出现在“//自动暂停”部分。 我错过了什么吗?
【问题讨论】:
-
我发现了主要问题:当我收到自动暂停事件时,我将 HKWorkoutSession 置于“暂停”模式。然后,会话暂停并且不会自动生成任何恢复事件。所以我必须避免暂停 HKWorkoutSession。困难在于考虑锻炼的持续时间(因为如果我不暂停 HKWorkoutSession,构建器 elapsedTime 在自动暂停期间会继续增加)。在保存到 HealthKit 之前,我必须检查如何修改锻炼持续时间
-
所以......经过调查,我面临另一个问题。 HKLiveWorkoutBuilder 能够处理经过时间的手动暂停,因为我们能够使用 HKWorkoutSession 的 pause() 和 resume() 方法。但是对于 motionPaused 和 motionresumenl,我们不能使用这些方法,并且构建器不会在自动暂停时停止经过的时间。有人有建议吗? Apple 文档很短...
标签: swift watchkit appdelegate healthkit pause