实时获取 Apple Watch heartRateVariabilitySDNN?

Muh*_*ori 7 ios swift healthkit apple-watch watchos

我正在使用下面的函数来获取 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)")
            }
Run Code Online (Sandbox Code Playgroud)

Dav*_*eet 0

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

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

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