我在 iPhone 应用程序中有 ViewController
:
class ViewController: UIViewController {
private let healthStore = HKHealthStore()
private let heartRateUnit = HKUnit(fromString: "count/min")
private var anchor = HKQueryAnchor(fromValue: Int(HKAnchoredObjectQueryNoAnchor))
override func viewDidLoad() {
super.viewDidLoad()
if let query = createHeartRateStreamingQuery(NSDate()) {
healthStore.executeQuery(query)
}
}
func createHeartRateStreamingQuery(workoutStartDate: NSDate) -> HKQuery? {
guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { return .None }
let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) in }
heartRateQuery.updateHandler = {(query, samples, deleteObjects, newAnchor, error) in
self.updateHeartRate(samples)
}
return heartRateQuery
}
但是当我使用锻炼应用程序时,heartRateQuery.updateHandler
仅调用一次。
看起来是同样的错误 - https://forums.developer.apple.com/thread/14571和 Monitor heart rate from HealthKit --> HKAnchoredObjectQuery only called after applicationDidBecomeActive (BUG or FEATURE?)
最佳答案
您需要为您的样本类型(心率)启用后台传送。查找方法
HKHealthStore.enableBackgroundDeliveryForType()
我在之前执行此方法
HKHealthStore.executeQuery().
关于swift - hkanchoredObjectQuery UpdateHandler仅调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143643/