HKWorkoutSessionDelegate : workoutSession(_:didGenerate:) 暂停检测问题
HKWorkoutSessionDelegate : workoutSession(_:didGenerate:) problem with pause detection
我正在为 Apple Watch 构建 运行 锻炼,但在实现 "auto-pause" 功能时遇到问题。
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()
}
}
问题出现在“//自动暂停”部分。
我错过了什么吗?
我终于找到了处理这种情况的方法。
当我收到 .motionPaused 或 .motionResumed 事件时,我必须手动将 .pause 和 .resume 事件添加到锻炼构建器以使总锻炼时间准确。
Apple文档中没有解释,所以我希望它能帮助其他面临同样问题的人。
通过这样做 auto pause/resume 工作正常:
case .motionPaused:
toggleSessionDisplayState(.paused)
// manually add pause event to fix workout duration
workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .pause, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])]) { (success, error) in
if error != nil {
print(error!)
}
}
os_log("Auto Pause Builder Event")
case .motionResumed:
toggleSessionDisplayState(.running)
// manually add resume event to fix workout duration
workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .resume, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])]) { (success, error) in
if error != nil {
print(error!)
}
}
os_log("Auto Resume Builder Event")
我正在为 Apple Watch 构建 运行 锻炼,但在实现 "auto-pause" 功能时遇到问题。
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()
}
}
问题出现在“//自动暂停”部分。 我错过了什么吗?
我终于找到了处理这种情况的方法。 当我收到 .motionPaused 或 .motionResumed 事件时,我必须手动将 .pause 和 .resume 事件添加到锻炼构建器以使总锻炼时间准确。 Apple文档中没有解释,所以我希望它能帮助其他面临同样问题的人。 通过这样做 auto pause/resume 工作正常:
case .motionPaused:
toggleSessionDisplayState(.paused)
// manually add pause event to fix workout duration
workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .pause, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])]) { (success, error) in
if error != nil {
print(error!)
}
}
os_log("Auto Pause Builder Event")
case .motionResumed:
toggleSessionDisplayState(.running)
// manually add resume event to fix workout duration
workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .resume, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])]) { (success, error) in
if error != nil {
print(error!)
}
}
os_log("Auto Resume Builder Event")