Healthkit enableBackgroundDeliveryForType недоступен, невозможно рассчитать частоту сердечных сокращений каждый час
Я пытаюсь вызвать enableBackgroundDeliveryForType после создания HKObserverQuery, но я понял, что даже сам метод отключен.
/*!
@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)
}
2 ответа
Невозможно запланировать периодический запуск приложений watchOS 2.0 в фоновом режиме для запроса данных HealthKit. Приложения для watchOS 2.0 могут обычно работать только на переднем плане, когда экран часов включен.
2 вещи, одна из которых вы пытаетесь открыть, в настоящее время доступна только для iPhone. Часы Apple даже не имеют фонового состояния, только неактивное состояние вместо этого. Второе яблоко пообещало, что отслеживание расширений приложений во время выполнения тренировок позволит оставаться на переднем плане, и это, как правило, верно до тех пор, пока запястье пользователя не опустится:(В любом случае, удачи, и, надеюсь, вы придумали, как реализовать это для своих целей.
Я не знаком с процессом, но вы можете просто запланировать усложнение для обновления каждый час, когда вы можете попытаться извлечь последний известный объект сердечного ритма из магазина здоровья... в любом случае, никогда не пробовал его для моих целей, и я почти уверен, что есть некоторые вещи, которые нужно будет изменить, но только мысль.
ИЛИ то, что я только что подумал о реализации... попробуйте перехватить изменения в магазине на телефоне, а затем отправить данные в часы с помощью фоновой передачи. По сути, вы можете делать обновления немедленно или ежедневно... до вас, а затем отправлять их на часы с телефона, я надеюсь, что это не будет обидой для фоновых приложений.