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 触发心率样本的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil