繁体   English   中英

在 WatchOS 的 LiveWorkoutSession 期间获取 heartRateVariabilitySDNN

[英]Get heartRateVariabilitySDNN during LiveWorkoutSession at WatchOS

我制作了一个简单的 watchOS 应用程序来运行正在运行的会话并监控心率变异性 (sdnn)。 在模拟器上运行我成功地获得了其他 ps,如距离、心率或卡路里,但不是 sdnn。

这是我设置 WorkoutManager 的方法:

    func workoutBuilderDidCollectEvent(_ workoutBuilder: HKLiveWorkoutBuilder) {
    //
    }
    
    func workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>) {
        for type in collectedTypes{
            print(type)
            guard let quantityType = type as? HKQuantityType else {return}
            let statistics = workoutBuilder.statistics(for: quantityType)
          
            updateForStatistics(statistics)
        }
    }
} 

而这块是实时获取数据的:

func updateForStatistics(_ statistics: HKStatistics?) {
        guard let statistics = statistics else { return }

        DispatchQueue.main.async {
            switch statistics.quantityType {
            case HKQuantityType.quantityType(forIdentifier: .heartRate):
                let heartRateUnit = HKUnit.count().unitDivided(by: HKUnit.minute())
                self.heartRate = statistics.mostRecentQuantity()?.doubleValue(for: heartRateUnit) ?? 0
                self.averageHeartRate = statistics.averageQuantity()?.doubleValue(for: heartRateUnit) ?? 0
            case HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned):
                let energyUnit = HKUnit.kilocalorie()
                self.activeEnergy = statistics.sumQuantity()?.doubleValue(for: energyUnit) ?? 0
            case HKQuantityType.quantityType(forIdentifier: .distanceWalkingRunning), HKQuantityType.quantityType(forIdentifier: .distanceCycling):
                let meterUnit = HKUnit.meter()
                self.distance = statistics.sumQuantity()?.doubleValue(for: meterUnit) ?? 0
            case HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN):
                let sdnnUnit = HKUnit.count()
                self.sdnn = statistics.mostRecentQuantity()?.doubleValue(for: sdnnUnit) ?? 0
            default:
                return
            }
        }
    }

如前所述,除 sdnn 外,所有其他 ps 都由 WatchOS 模拟 - 在这里我总是得不到任何数据。

此外,我知道如何通过 HKQuantitySample 编写自己的 sdnn 值,但需要操作系统在会话期间跟踪的特定值。 或者一些解决方法来强制操作系统为我保存它。

有什么想法吗?

ssdUnit 应该是HKUnit(from: "ms")

不幸的是,您无法访问 heartRateVariabilitySDNN 参数,因为它不会在锻炼期间测量。 但是,您可以使用 Mindfulness 应用程序中的呼吸练习手动触发 HRV 测量

暂无
暂无

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

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