我試圖在創建HKObserverQuery後觸發enableBackgroundDeliveryForType,但我意識到即使方法本身被禁用。Healthkit enableBackgroundDeliveryForType不可用,無法計算每小時的心率
/*!
@method enableBackgroundDeliveryForType:frequency:withCompletion:
@abstract This method enables activation of your app when data of the type is recorded at the cadence specified.
@discussion When an app has subscribed to a certain data type it will get activated at the cadence that is specified
with the frequency parameter. The app is still responsible for creating an HKObserverQuery to know which
data types have been updated and the corresponding fetch queries. Note that certain data types (such as
HKQuantityTypeIdentifierStepCount) have a minimum frequency of HKUpdateFrequencyHourly. This is enforced
transparently to the caller.
*/
那麼如何觸發一個工作,每小時檢查心率。
healthStore.enableBackgroundDeliveryForType(sampleType, frequency: .Immediate, withCompletion: {(succeeded: Bool, error: NSError?) in
if succeeded{
print("Enabled background delivery of weight changes")
} else {
if let theError = error{
print("Failed to enable background delivery of weight changes. ")
print("Error = \(theError)")
}
}
})
以下是我正在運行的查詢以獲取示例。
let sampleType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!
//let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)
let query = HKObserverQuery(sampleType: sampleType, predicate: nil) {
query, completionHandler, error in
if error != nil {
// Perform Proper Error Handling Here...
print("*** An error occured while setting up the stepCount observer. ***")
abort()
}else{
print("sampleType ",sampleType)
}
self.heightChangedHandler()
completionHandler()
}
func heightChangedHandler(){
let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate,
ascending: true)
let sampleType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!
let query = HKSampleQuery(sampleType: sampleType, predicate: nil, limit: Int(HKObjectQueryNoLimit), sortDescriptors: [sortDescriptor]) { (query: HKSampleQuery, results: [HKSample]?, error: NSError?) -> Void in
guard let results = results where results.count > 0 else {
print("Could not read the user's weight")
print("or no weight data was available")
return
}
for sample in results as! [HKQuantitySample]{
let heartRate = sample.quantity
let heartRateDouble = heartRate.doubleValueForUnit(self.countPerMinuteUnit)
print("Sample ",sample.quantity ," tyoe ",sample.quantityType," heartRateDouble ",heartRateDouble)
}
}
healthStore.executeQuery(query)
}