I am trying to trigger enableBackgroundDeliveryForType after creating a HKObserverQuery , but I realised that even the method itself is disabled .
/*!
@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.
*/
So how to trigger a job which will check Heart rate every hour .
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)")
}
}
})
Following is the query I am running to get the sample.
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)
}
There is no way to schedule watchOS 2.0 apps to launch in the background periodically to query for HealthKit data. Apps for watchOS 2.0 may generally only run in the foreground while the screen of the watch is on.