0

HealthKit から最近の心拍数を取得する次の関数があります。受け取ったサンプルを調べると、タイムスタンプが過去 5 分以内であることがよくあります。ただし、Apple Watch の心拍数のコンプリケーションを見ると、次のように異なる値になることがあります。

  • I see: 84 BPM 5 MIN AGO
  • Apple Watch は 84 BPM 5 MIN AGO または 80 BPM NOW のようなものを表示できます

終了日を実験して「厳密な終了日」を使用してみましたが、ヘルスキットから取得したデータがアップルウォッチの心拍数の複雑さよりも遅れていることがよくあります.

ウォッチで最新の心拍数を照会する方法はありますか (ヘルス キットをスキップします)? 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
    }
}
4

1 に答える 1

1

ウォッチでワークアウトを開始すると、数秒ごとに心拍数の更新を取得できます。HKLiveWorkoutBuilder のセットアップ方法を調べる

HKLiveWorkoutBuilder がないと、それほど速く更新されません。

于 2019-05-12T20:20:22.697 に答える