如何使用HKHeartbeatSeriesSample检索一段时间内的心跳



我正试图根据2019年WWDC会议上的这次会议从healthStore获取潜在的心跳数据-探索HealthKit中的新数据表示。在标记24:40处,解释了HealthKit如何具有能够存储节拍的精确时间戳的传感器,并且可以通过HKHeartbeatSeriesSample类型访问这些数据。

我创建了这个查询来检索数据:

func queryData(start: Date, end: Date) {
let predicate = HKQuery.predicateForSamples(withStart: start, end: end, options: [])

let heartBeatSeriesSample = HKSampleQuery(sampleType: HKSeriesType.heartbeat(), predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) {
(query, results, error) in

guard let samples = results, let sample = samples.first as? HKHeartbeatSeriesSample else {
print("Failed: no samples collected")
return
}
print(results as Any)

let heartBeatSeriesQuery = HKHeartbeatSeriesQuery(heartbeatSeries: sample) {
(query, timeSinceSeriesStart, precededByGap, done, error) in
guard error == nil else {
print("Failed querying the raw heartbeat data: (String(describing: error))")
return
}
print(timeSinceSeriesStart)
}
self.healthStore?.execute(heartBeatSeriesQuery)
}
healthStore?.execute(heartBeatSeriesSample)
}

但它只有在我不使用谓词的情况下才有效,谓词会显示之前存储的所有心跳数据,但在这段时间内什么都不存储。我已经设法通过以下方式使用HKHeartbeatSeriesBuilder存储了一些数据:

let builder = HKHeartbeatSeriesBuilder(
healthStore: self.healthStore!,
device: .local(),
start: start
)
builder.addHeartbeatWithTimeInterval(sinceSeriesStartDate: 0.5, precededByGap: false) {
(success, error) in
guard success else {
fatalError("Could not add heartbeat: (String(describing: error))")
}
}

它存储的是数据,而不是Apple Watch设备读取的实际节拍。由于我需要实际的节拍来以这种方式存储它们,所以在我必须首先存储数据(经典的鸡肉和鸡蛋(之前,必须有一个查询来提供这些数据。

在给定的时间段内,我如何读取带有时间戳的确切心跳?

是。不幸的是,仅靠applewatch无法提取原始数据。我在苹果开发者支持部门开了一张罚单,他们说使用第三方设备可以实现广告中的功能。非常令人失望,而且肯定不会选择苹果在未来进行这样一个严肃的项目。

最新更新