iOS HealthKit - как получить самую последнюю текущую частоту сердечных сокращений, например, осложнение частоты пульса?

У меня есть следующая функция, которая измеряет частоту сердечных сокращений из комплекта HealthKit. Когда я изучаю полученный образец, он часто имеет метку времени в течение последних 5 минут. Однако, если я посмотрю на осложнение пульса Apple Watch, оно иногда имеет другое значение, например:

  • Я вижу: 84 BPM 5 MIN AGO
  • Apple Watch могут показывать 84 BPM 5 MIN AGO или что-то вроде 80 BPM NOW

Я попытался поэкспериментировать с конечными датами и использовать "строгую конечную дату", но все еще вижу, что данные, которые я получаю из аптечки, часто отстают от осложнений сердечного ритма.

Могу ли я узнать у себя последнюю частоту сердечных сокращений прямо на часах (пропуская аптечку)? Есть ли способ попросить часы Apple измерять частоту пульса прямо сейчас?

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
    }
}

0 ответов

Если вы начнете тренировку на часах, вы сможете получать обновления пульса каждые несколько секунд. Посмотрите, как настроить HKLiveWorkoutBuilder

Без HKLiveWorkoutBuilder он не будет обновляться так быстро.

Другие вопросы по тегам