我具有以下功能,可从HealthKit获取最近的心率。当我检查收到的样本时,它通常在最近5分钟内带有时间戳。但是,如果我看一下Apple Watch心率并发症,它有时具有不同的值,例如:
我尝试使用结束日期进行实验,并使用“严格结束日期”,但仍然看到我从healthkit获得的数据经常落后于Apple Watch心率并发症。
我是否可以通过手表(跳过保健工具包)查询最新的心率?是否可以要求苹果手表立即进行心率测量?
static func getCurrentHeartRate () {
guard let sampleType = HKObjectType.quantityType(forIdentifier: .heartRate) else {
return}
let predicate = HKQuery
.predicateForSamples(
withStart: Date().addingTimeInterval(-3600),
end: Date(),
options: [])
let sortDescriptor = NSSortDescriptor(
key: HKSampleSortIdentifierStartDate,
ascending: false)
let query = HKSampleQuery(sampleType: sampleType,
predicate: predicate,
limit: Int(1),
sortDescriptors: [sortDescriptor]) { query, results, error in
guard let samples = results as? [HKQuantitySample] else {
return
}
for s in samples {
print("Recent heart rate: \(s.heartRateString())")
}
}
HKHealthStore().execute(query)
}
extension HKQuantitySample {
func heartRateString() -> String {
let date = self.startDate
let updateString = "\(heartRateStringShort())\(date.timeAgoString())"
return updateString
}
func heartRateStringShort() -> String {
let heartRateUnit = HKUnit(from: "count/min")
let heartRate = Int(self.quantity.doubleValue(for: heartRateUnit))
let updateString = "\(heartRate) BPM"
return updateString
}
}
答案 0 :(得分:1)
如果您在手表上开始锻炼,则可以每隔几秒钟获取一次心率更新。查找如何设置HKLiveWorkoutBuilder
没有HKLiveWorkoutBuilder,更新速度不会很快。