繁体   English   中英

实时获取 Apple watch heartRateVariabilitySDNN?

[英]Get Apple watch heartRateVariabilitySDNN realtime?

  • 我在下面使用 function 来获取 heartRateVariabilitySDNN,但它只获取一次并且不像 heartbeat 那样计算实时?

    func HRVstart() { guard let quantityType = 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)") }

根据我的经验,watchOS 仅在特定时间测量 HRV。 锻炼活动似乎不是那些时代之一。 使用“呼吸”应用程序似乎会触发 HRV 测量。

这不是一个很好的解决方案,但您可以要求您的用户在活动 session 之前和之后使用“呼吸”应用程序进行测量之前和之后。 但我不知道有什么方法可以在 session 期间获得当前的 HRV 数字。

我希望其他人有更好的解决方案!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM