enableBackgroundDeliveryForType

enableBackgroundDeliveryForType

在创建hkobserverquery之后,我试图触发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)
}

最佳答案

无法安排WatchOS 2.0应用程序定期在后台启动以查询HealthKit数据。watchos 2.0的应用程序通常只能在手表屏幕打开时在前台运行。

关于swift - Healthkit enableBackgroundDeliveryForType不可用,无法每小时计算心率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32958068/

10-10 21:06