iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?
Posted
技术标签:
【中文标题】iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?【英文标题】:iOS HealthKit - how to get the absolutely latest, current heart rate, like the watch heart rate complication? 【发布时间】:2018-12-08 10:53:53 【问题描述】:我有以下从 HealthKit 获取最近心率的函数。当我检查收到的样本时,它通常在最后 5 分钟内有一个时间戳。但是,如果我查看 Apple Watch 心率并发症,它有时具有不同的值,例如:
我看到:84 BPM 5 分钟前 Apple Watch 可以显示 84 BPM 5 MIN AGO 或类似 80 BPM NOW 的信息我尝试尝试使用结束日期并使用“严格结束日期”,但仍然发现我从 healthkit 获得的数据经常落后于 Apple Watch 心率并发症。
我有没有办法直接在手表上查询最新的心率(跳过健康包)? 有没有办法让 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
【问题讨论】:
【参考方案1】:如果您在手表上开始锻炼,您可以每隔几秒更新一次心率。查看如何设置 HKLiveWorkoutBuilder
没有 HKLiveWorkoutBuilder,它不会更新得那么快。
【讨论】:
以上是关于iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 HealthKit 中获得使用 Cordova 编写锻炼路线的许可