函数 HRVstart() {
守卫让数量类型 = HKObjectType.quantityType(forIdentifier: .heartRateVariabilitySDNN) else { return }
self.healthStore.execute(self.HRVStreamingQuery())
// Create query to receive continiuous heart rate samples.
let datePredicate = HKQuery.predicateForSamples(withStart: Date(), end: nil, options: .strictStartDate)
let devicePredicate = HKQuery.predicateForObjects(from: [HKDevice.local()])
let queryPredicate = NSCompoundPredicate(andPredicateWithSubpredicates:[datePredicate, devicePredicate])
let updateHandler: HKQueryUpdateHandler = { [weak self] query, samples, deletedObjects, queryAnchor, error in
if let quantitySamples = samples as? [HKQuantitySample] {
self?.HRVprocess(samples: quantitySamples)
}
}
let query = HKAnchoredObjectQuery(type: quantityType,
predicate: queryPredicate,
anchor: nil,
limit: HKObjectQueryNoLimit,
resultsHandler: updateHandler)
query.updateHandler = updateHandler
// Execute the heart rate query.
healthStore.execute(query)
// Remember all active Queries to stop them later.
self.HRVactiveQueries.append(query)
}
private func HRVStreamingQuery() -> HKQuery {
let predicate = HKQuery.predicateForSamples(withStart: NSDate() as Date, end: nil, options: .strictStartDate)
let query = HKAnchoredObjectQuery(type: self.heartRateVaribalityType, predicate: nil, anchor: nil, limit: Int(HKObjectQueryNoLimit)) {
(query, samples, deletedObjects, anchor, error) -> Void in
self.HRVformatSamples(samples: samples)
}
query.updateHandler = { (query, samples, deletedObjects, anchor, error) -> Void in
self.HRVformatSamples(samples: samples)
}
self.HRVactiveQueries.append(query)
return query
}
private func HRVformatSamples(samples: [HKSample]?) {
guard let samples = samples as? [HKQuantitySample] else { return }
guard let quantity = samples.last?.quantity else { return }
let beats = quantity.doubleValue(for: HKUnit.secondUnit(with: .milli))
let timestamp = samples[0].endDate
let newHeartRateVariablity = HeartRateVariablity(timestamp: timestamp, hrv: beats)
delegate?.heartRateVariablity(didChangeTo: newHeartRateVariablity)
print("HeartRateVariablity: \(beats)")
}
最佳答案
根据我的经验,HRV 仅在特定时间由 watchOS 测量。锻炼事件似乎不是其中之一。使用“呼吸”应用程序似乎会触发 HRV 测量。
这不是一个很好的解决方案,但您可以要求您的用户在事件 session 前后使用“呼吸”应用程序进行测量前后的测量。但我不知道有什么方法可以在 session 期间获得当前的 HRV 数字。
我希望其他人有更好的解决方案!
关于ios - 实时获取 Apple Watch 心率变异性 SDNN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081308/