iOS HealthKit - как получить самую последнюю текущую частоту сердечных сокращений, например, осложнение частоты пульса? - PullRequest
0 голосов
/ 08 декабря 2018

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

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

Я попытался поэкспериментировать с датами окончания и использовать «строгую дату окончания», но все же вижу, что данные, которые я получаю из аптечки, часто отстают от яблочных часовОсложнение сердечного ритма.

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

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 Ответ

0 голосов
/ 12 мая 2019

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

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

...