您如何使用 HealthKit 检测锻炼开始/停止?
Posted
技术标签:
【中文标题】您如何使用 HealthKit 检测锻炼开始/停止?【英文标题】:How do you detect Workout start / stop with HealthKit? 【发布时间】:2016-06-25 00:44:26 【问题描述】:我正在寻找一种方法来检测锻炼检测/停止使用 HealthKit,但似乎无法检测到它。
在 android 中,您会获得会话的“ACTION_SESSION_START”和“ACTION_SESSION_END”。
有没有人尝试检测锻炼开始/停止?
感谢您的宝贵时间!
【问题讨论】:
您是否尝试检测 watchOS 上的另一个应用程序何时?没有用于此的 API。你想用这些信息做什么? @Allan 我正在为 HealthKit 创建一个测试应用程序,想知道是否有任何方法可以“监听”或“查询”锻炼状态的状态变化,无论是来自另一个应用程序还是来自苹果手表。基本上是用测试应用程序记录“任何锻炼开始”或“任何锻炼停止”。谢谢你的回答! 我没有在HKWorkout
文档中看到此功能:developer.apple.com/reference/healthkit/hkworkout
This 是一个很棒的教程,应该可以回答你的问题。
@Dershowitz123 该教程展示了如何保存锻炼,而不是检测它们。
【参考方案1】:
没有用于观察其他应用记录的锻炼的 API。
【讨论】:
【参考方案2】:我以为你可以检测事件。不保存锻炼。
在 HealthKit 中,您可以创建锻炼事件。因此,理论上您可以编写一些代码来检测pause
/resume
事件。
创建一个持续 ___ 时间的跑步锻炼。
let finish = NSDate() // Now
let start = finish.dateByAddingTimeInterval(0000) // workout time
let workout = HKWorkout(activityType: .Running, startDate: start, endDate: finish)
创建Pause
(停止)和Resume
(开始)事件。
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 语句可以检测到 Pause
或 Resume
。
我不确定您想要的特定 dateByAddingTimeInterval
值,但您绝对可以尝试使用零值吗?因为从技术上讲,00
仍然是一个事件。
锻炼事件在活动和非活动状态之间切换锻炼对象。你可以创建一个方法detectWorkoutEvent
。
【讨论】:
以上是关于您如何使用 HealthKit 检测锻炼开始/停止?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 HealthKit 中获得使用 Cordova 编写锻炼路线的许可
如何在 HealthKit 中获得使用 Cordova 编写锻炼路线的许可
如何使用 Swift 在 healthkit 中访问锻炼的元数据