iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?

Posted

技术标签:

【中文标题】iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?【英文标题】:iOS HealthKit - how to get the absolutely latest, current heart rate, like the watch heart rate complication? 【发布时间】:2018-12-08 10:53:53 【问题描述】:

我有以下从 HealthKit 获取最近心率的函数。当我检查收到的样本时,它通常在最后 5 分钟内有一个时间戳。但是,如果我查看 Apple Watch 心率并发症,它有时具有不同的值,例如:

我看到:84 BPM 5 分钟前 Apple Watch 可以显示 84 BPM 5 MIN AGO 或类似 80 BPM NOW 的信息

我尝试尝试使用结束日期并使用“严格结束日期”,但仍然发现我从 healthkit 获得的数据经常落后于 Apple Watch 心率并发症。

我有没有办法直接在手表上查询最新的心率(跳过健康包)? 有没有办法让 Apple Watch 现在进行心率测量?

static func getCurrentHeartRate () 
    guard let sampleType = HKObjectType.quantityType(forIdentifier: .heartRate) else 
        return

    let predicate = HKQuery
        .predicateForSamples(
            withStart: Date().addingTimeInterval(-3600),
            end: Date(),
            options: [])

    let sortDescriptor = NSSortDescriptor(
        key: HKSampleSortIdentifierStartDate,
        ascending: false)
    let query = HKSampleQuery(sampleType: sampleType,
                              predicate: predicate,
                              limit: Int(1),
                              sortDescriptors: [sortDescriptor])  query, results, error in

                                guard let samples = results as? [HKQuantitySample] else 

                                    return
                                
                                for s in samples 
                                    print("Recent heart rate: \(s.heartRateString())")
                                
    
    HKHealthStore().execute(query)


extension HKQuantitySample 
    func heartRateString() -> String 
        let date = self.startDate
        let updateString = "\(heartRateStringShort())\(date.timeAgoString())"
        return updateString
    

    func heartRateStringShort() -> String 

        let heartRateUnit = HKUnit(from: "count/min")
        let heartRate = Int(self.quantity.doubleValue(for: heartRateUnit))

        let updateString = "\(heartRate) BPM"
        return updateString
    

【问题讨论】:

【参考方案1】:

如果您在手表上开始锻炼,您可以每隔几秒更新一次心率。查看如何设置 HKLiveWorkoutBuilder

没有 HKLiveWorkoutBuilder,它不会更新得那么快。

【讨论】:

以上是关于iOS HealthKit - 如何获得绝对最新的当前心率,例如手表心率并发症?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 HealthKit 数据中获取最新的体重条目

iOS 从 HealthKit 读取数据

iOS 从 HealthKit 读取数据

如何在 HealthKit 中获得使用 Cordova 编写锻炼路线的许可

如何在 HealthKit 中获得使用 Cordova 编写锻炼路线的许可

iOS Healthkit 使用探索分析 🌛