Swift HealthKit 触发心率样本

Posted

技术标签:

【中文标题】Swift HealthKit 触发心率样本【英文标题】:Swift HealthKit Trigger Heart Rate Sample 【发布时间】:2017-06-15 00:13:16 【问题描述】:

我可以使用以下代码从 HealthKit 读取一段时间(锻炼持续时间)的平均心率数据。

但是,当我查看 Apple Health 应用程序时,它显示 Apple Watch 的心率样本采集频率非常低(每 15-30 分钟一次)。这使得我在此期间的平均 HR 读数非常不准确。

如何触发 HealthKit 从手表中采样(收集)心率数据并将其写入 HealthKit?

    let endDate = (calendar as NSCalendar).date(byAdding: NSCalendar.Unit.minute, value: duration, to: startDate, options: NSCalendar.Options())
    let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions())

    let squery = HKStatisticsQuery(quantityType: heartRateType, quantitySamplePredicate: predicate, options: HKStatisticsOptions.discreteAverage, completionHandler:  (qurt, result, errval) -> Void in

        guard errval == nil else  print("error"); completion(0.0, errval); return 

        var averageHeartRate : Double = 0.0
        if (result != nil && result!.averageQuantity() != nil) 
            let quantity : HKQuantity = result!.averageQuantity()!
            averageHeartRate = quantity.doubleValue(for: HKUnit.count().unitDivided(by: HKUnit.minute()))
        
    )

【问题讨论】:

您在进行测量之前是否已启动HKWorkoutSession @DávidPásztor 我没有,一开始就很好,谢谢! @DávidPásztor 我开始了锻炼,但是当我调用结束会话时它似乎并没有停止。小时监视器继续保持打开状态,手表应用程序保持在前台。有什么办法可以阻止这种情况吗? 【参考方案1】:

要从 Apple Watch 获取更频繁的心率数据,用户必须在其手表上运行一个应用程序来跟踪 HKWorkoutSession。如果您的应用具有跟踪锻炼的配对 watchOS 应用,您可以在 iPhone 上使用startWatchApp(with workoutConfiguration:completion:) 开始锻炼。

【讨论】:

谢谢,我添加了,这解决了我的问题!注意我还需要添加 WKBackgroundModes 和 UIBackgroundModes 我开始了锻炼,但是当我调用结束会话时它似乎并没有停止。小时监视器继续保持打开状态,手表应用程序保持在前台。有什么办法可以阻止这种情况吗? @achen1217 你能帮我看看你是如何做 HKWorkoutSession 的,以及你是如何使用 UIBackgroundModes 和 WKBackgroundModes 的吗? 这是可行的,但苹果不让我们去 Appstore。主要原因是:该应用没有健身核心功能!

以上是关于Swift HealthKit 触发心率样本的主要内容,如果未能解决你的问题,请参考以下文章

iOS HealthKit 如何保存心率(bpm)值?迅速

如何使用 Swift 查询 Healthkit 的平均心率

如何使用 Swift 查询 Healthkit 的平均心率

Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil

Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil

如何使用 Swift 从 iOS HealthKit 应用程序读取心率?