首页 > 解决方案 > 实时心率记录时间间隔 - WatchOS

问题描述

我创建了一个带有实时心率记录的手表应用程序,为此我使用了锻炼会话和 HKAnchoredObjectQuery 来获取结果。在这个苹果中提到,每 5 秒会更新一次心率值,但在我的情况下,它最多需要 5-10 秒才能更新。我正在使用 watch Serious 3,我需要每 5 秒收集一次值。

func startWorkout() {
    if (session != nil) {
        return
    }
    let workoutConfiguration = HKWorkoutConfiguration()
    workoutConfiguration.activityType = .walking
    workoutConfiguration.locationType = .outdoor
    do {
        session = try HKWorkoutSession(healthStore: healthStore, configuration: workoutConfiguration)
        session?.delegate = self
    } catch {
        print("Unable to create the workout session!")
    }
    session?.startActivity(with: Date())
}
func startHeartRateStreamingQuery(_ workoutStartDate: Date){
    
    guard let quantityType = HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate) else { return nil }
    
    let datePredicate = HKQuery.predicateForSamples(withStart: workoutStartDate, end: nil, options: .strictEndDate )
    let predicate = NSCompoundPredicate(andPredicateWithSubpredicates:[datePredicate])
    
    let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: predicate, anchor: nil, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) -> Void in
        self.updateHeartRate(sampleObjects)
    }
    
    heartRateQuery.updateHandler = {(query, samples, deleteObjects, newAnchor, error) -> Void in
        self.updateHeartRate(samples)
    }
    healthStore.execute(heartRateQuery)
}
func updateHeartRate(_ samples: [HKSample]?) {
         guard let heartRateSamples = samples as? [HKQuantitySample] else {return}
       for sample in heartRateSamples {
         let timeStamp = sample.startDate
         let value = sample.quantity
         print("\(timeStamp)_\(value)")
     }
}

标签: swiftwatchos

解决方案


推荐阅读