如何使用HealthKit检测运动的开始/结束?

3
我正在寻找一种使用HealthKit检测健身活动的方式,但似乎没有办法检测。在Android中,您可以使用“ACTION_SESSION_START”和“ACTION_SESSION_END”来获取会话信息。有人尝试过检测健身活动的开始/结束吗?感谢您的时间!

你是否尝试在watchOS上检测另一个应用程序?目前没有相关的API。请问您想使用这些信息做什么? - Allan
@Allan,我正在为HealthKit创建一个测试应用程序,并想知道是否有任何方法可以“监听”或“查询”训练状态的状态更改,无论是来自另一个应用程序还是来自Apple Watch。基本上,使用测试应用程序记录“任何训练开始”或“任何训练停止”。谢谢您的回答! - Patrick Cho
1
我在 HKWorkout 文档中没有看到这个功能被公开:https://developer.apple.com/reference/healthkit/hkworkout - JAL
这是一个非常棒的教程,应该能够回答你的问题。 - Mtoklitz113
@Dershowitz123 那个教程展示了如何保存锻炼记录,而不是检测它们。 - JAL
2个回答

0

目前没有API可以观察其他应用程序记录的锻炼。


0

我在想你可以检测事件。而不是保存一次锻炼。

在 HealthKit 中,你可以创建锻炼事件。因此,你可以理论上编写代码来检测暂停/恢复事件。

创建一个持续___时间的跑步锻炼。

let finish = NSDate() // Now  
let start = finish.dateByAddingTimeInterval(0000) // workout time

let workout = HKWorkout(activityType: .Running, startDate: start, endDate: finish) 

创建“暂停”(停止)和“恢复”(开始)事件。
let workoutEvents: [HKWorkoutEvent] = [  
HKWorkoutEvent(type: .Pause, date: startDate.dateByAddingTimeInterval(000)),
HKWorkoutEvent(type: .Resume, date: startDate.dateByAddingTimeInterval(000))
]

然后您需要更改创建HKWorkout对象的方式,使用更复杂的构造函数,该构造函数允许您包括workoutEvents

let workout = HKWorkout(  
activityType: .Running
startDate: start,
endDate: end,
workoutEvents: workoutEvents,
device: nil,
metadata: nil
)

在这一点上,通常您会将锻炼传递给HKHealthStore.saveObject以像这样保存它。

healthStore.saveObject(workout) { (success: Bool, error: NSError?) -> Void in

if success {
    // Workout was saved
}
else {
    // Workout was not saved
}
}

但是

在你的情况下,你不想保存。你想要检测事件。可以使用一个switch语句来检测暂停恢复

我不确定你想要的具体dateByAddingTimeInterval值,但你肯定可以尝试使用零值进行实验吧?因为从技术上讲,00仍然是一个事件。

锻炼事件在活动和非活动状态之间切换锻炼对象。你可以创建一个方法detectWorkoutEvent


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接