ios - 实时获取 Apple Watch 心率变异性 SDNN?

标签 ios swift apple-watch healthkit watchos

  • 我正在使用下面的函数来获取 heartRateVariabilitySDNN,但它只获取一次,而不是像 heartbeat 那样实时计算?

    函数 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/

    相关文章:

    swift - 从 compactMap 返回和退出

    ios - 如何子类化 UICollectionViewFlowLayout 以便可以覆盖 layoutAttributesForElementsInRect

    audio - 如何控制 Apple Watch 蓝牙音频的音量

    ios - 使用文本更改 apple watch swift 动画 WKInterfaceLabel

    ios - SceneKit:像 SpriteKit 一样通过直接设置 velocity 属性来移动 SCNNode?

    iOS 6 重置所有设置问题与保存的 BLE 外设 UUID 相关

    iphone - map 图钉上的附件按钮[重复项]

    ios - 使用 SpriteKit 在随机位置复制 Sprite

    ios - 如何使部分编程 UITableView 文本可点击?

    ios - Apple Watch - 以编程方式打开 map