gpt4 book ai didi

ios - 如何在应用程序处于后台时查询 HealthKit (HKWorkout) 更新?

转载 作者:行者123 更新时间:2023-11-29 11:35:34 29 4
gpt4 key购买 nike

编辑以添加我基于 WWDC 2016 的“充分利用 Healthkit”演讲的更新代码,但除非我打开应用程序,否则我仍然无法获取新锻炼的打印声明?

在 Apple Watch 上保存新锻炼后,我正在尝试在 iPhone 上观察新锻炼。下面是我在 didFinishLaunching 中运行的代码。为了测试它,我在我的 iPhone 应用程序上运行 Xcode...构建并运行,然后导航回主屏幕。然后在我的 watch 上开始并保存锻炼,但是我的打印语句没有打印在控制台上。我错过了什么?

func startObservingNewWorkouts() {

let sampleType = HKObjectType.workoutType()

//1. Enable background delivery for workouts
self.healthStore.enableBackgroundDelivery(for: sampleType, frequency: .immediate) { (success, error) in
if let unwrappedError = error {
print("could not enable background delivery: \(unwrappedError)")
}
if success {
print("background delivery enabled")
}
}

//2. open observer query
let query = HKObserverQuery(sampleType: sampleType, predicate: nil) { (query, completionHandler, error) in

self.updateWorkouts() {
completionHandler()
}


}
healthStore.execute(query)

}

func updateWorkouts(completionHandler: @escaping () -> Void) {

var anchor: HKQueryAnchor?

let sampleType = HKObjectType.workoutType()

let anchoredQuery = HKAnchoredObjectQuery(type: sampleType, predicate: nil, anchor: anchor, limit: HKObjectQueryNoLimit) { [unowned self] query, newSamples, deletedSamples, newAnchor, error in

self.handleNewWorkouts(new: newSamples!, deleted: deletedSamples!)

anchor = newAnchor

completionHandler()
}
healthStore.execute(anchoredQuery)


}

func handleNewWorkouts(new: [HKSample], deleted: [HKDeletedObject]) {
print("new sample added = \(new.last.startTime!)")
}

最佳答案

事实证明这段代码 👆 有效,只是我在模拟器中进行了测试,显然观察者查询执行了 NOT在模拟器中运行时会触发,但在设备上运行时会触发

关于ios - 如何在应用程序处于后台时查询 HealthKit (HKWorkout) 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49614618/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com