如何解决自iOS14或watchOS7起,HealthKit数据不会更新
我以前从Apple Watch编写的HealtKit中获取接近实时的心率,直到iOS13像下面这样活跃。应用程序每次访问HealthKit并接近实时心率(几乎每5秒更新一次)。
但是在iOS14中,应用程序每次都能获得价值,但从未更新过。我一定会开始进行Apple Watch锻炼。然后,一旦进入后台并回到前台,应用程序就会获得更新的心率值。但是要获得另一个更新的值,您必须进行一次背景操作。
当打开某些应用程序(例如设置或开发应用程序)时,Apple Watch似乎会将数据推送到healthkit。
如何解决?
self.awTimer = Timer.scheduledTimer(timeInterval: 1.0,target: self,selector: #selector(self.getHeartBeatFromAppleWatch),userInfo: nil,repeats: true)
}
@objc private func getHeartBeatFromAppleWatch() {
let sortDescriptors = [NSSortDescriptor(key: HKSampleSortIdentifierStartDate,ascending: false)]
let query = HKSampleQuery.init(sampleType: self.hkTypeHeartRate,predicate: nil,limit: 1,sortDescriptors: sortDescriptors,resultsHandler: { (query,samples,error) -> Void in
if let error = error {
NSLog("[updateHeartRateNormal] resultHandler error: \(error.localizedDescription)")
// error event
} else if let samples = samples {
// success event
}
})
self.healthStore.execute(query)
}
此外,我尝试了如下所示的被动方式,发生了同样的事情。
let distanceQuery = HKAnchoredObjectQuery(type: self.hkTypeHeartRate,predicate: .none,anchor: nil,limit: 0) { (query,deletedObjects,anchor,error) -> Void in
print(samples)
}
// This is called each time a new value is entered into HealthKit (samples may be batched together for efficiency)
distanceQuery.updateHandler = { (query,error) -> Void in
print(samples)
}
// Start the query
self.healthStore.execute(distanceQuery)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。