如何在HealthKit中查询心率以获得传统的HKQuantitySamples和累积数量样本



我下面的心率查询使用旧的传统HKSampleQuery来获取心率,但是,如果应用程序将心率作为HKCumulativeQuantitySample保存到Apple Health中,那么我下面的查询不会捕获HKCumulativeQuantitySample中的所有心率。如何查询以便在Apple Health中捕获这两种类型的心率样本?

class func getHeartRateSamplesFrom(workout: HKWorkout, handler: @escaping ([HKQuantitySample]?, WorkoutManagerError?) -> Void) {

guard let heartRateType:HKQuantityType   = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate) else { return }

//predicate
let startDate = workout.startDate
let endDate = workout.endDate

let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: .strictStartDate)

//descriptor
let sortDescriptors = [
NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false) 
]
let heartRateQuery = HKSampleQuery(sampleType: heartRateType,
predicate: predicate,
limit: (HKObjectQueryNoLimit),
sortDescriptors: sortDescriptors)
{ (query:HKSampleQuery, results:[HKSample]?, error:Error?) -> Void in

guard error == nil else { print("get heart rate error"); return }

guard let unwrappedResults = results as? [HKQuantitySample] else { print("get heart rate error"); return}
handler(unwrappedResults, nil)


}
HealthStoreSingleton.sharedInstance.healthStore.execute(heartRateQuery)
}

只需将HKSampleQuery的用法替换为HKQuantitySeriesSampleQuery即可。这将获得与谓词匹配的所有值,无论它们是否是序列的一部分。

这适用于所有数量类型,因此,如果您要查询HKQuantityType的单个值,通常需要先使用此查询。

相关内容

  • 没有找到相关文章

最新更新