从 healthKit 中提取心率
Posted
技术标签:
【中文标题】从 healthKit 中提取心率【英文标题】:Extract heart rate from healthKit 【发布时间】:2019-09-05 07:34:33 【问题描述】:我正在尝试使用 swift 构建一个应用程序,该应用程序将从 iwatch 中提取心率并将其显示给用户,同时它会在用户的 iphone 中播放一些音乐。对 ios 来说很新,所以我试图弄清楚如何从 iwatch 中的 healthkit 中提取数据并将其与移动应用程序同步。我需要构建 2 个应用程序,一个用于手表和手机还是同一个应用程序?以及如何集成健康工具包,因为我刚刚在 target->capabilities 中启用了它。
【问题讨论】:
可能重复:***.com/questions/35039742/… 【参考方案1】:public func subscribeToHeartBeatChanges()
// Creating the sample for the heart rate
guard let sampleType: HKSampleType =
HKObjectType.quantityType(forIdentifier: .heartRate) else
return
/// Creating an observer, so updates are received whenever HealthKit’s
// heart rate data changes.
self.heartRateQuery = HKObserverQuery.init(
sampleType: sampleType,
predicate: nil) [weak self] _, _, error in
guard error == nil else
log.warn(error!)
return
/// When the completion is called, an other query is executed
/// to fetch the latest heart rate
self.fetchLatestHeartRateSample(completion: sample in
guard let sample = sample else
return
/// The completion in called on a background thread, but we
/// need to update the UI on the main.
DispatchQueue.main.async
/// Converting the heart rate to bpm
let heartRateUnit = HKUnit(from: "count/min")
let heartRate = sample
.quantity
.doubleValue(for: heartRateUnit)
/// Updating the UI with the retrieved value
self?.heartRateLabel.setText("\(Int(heartRate))")
)
public func fetchLatestHeartRateSample(
completion: @escaping (_ sample: HKQuantitySample?) -> Void)
/// Create sample type for the heart rate
guard let sampleType = HKObjectType
.quantityType(forIdentifier: .heartRate) else
completion(nil)
return
/// Predicate for specifiying start and end dates for the query
let predicate = HKQuery
.predicateForSamples(
withStart: Date.distantPast,
end: Date(),
options: .strictEndDate)
/// Set sorting by date.
let sortDescriptor = NSSortDescriptor(
key: HKSampleSortIdentifierStartDate,
ascending: false)
/// Create the query
let query = HKSampleQuery(
sampleType: sampleType,
predicate: predicate,
limit: Int(HKObjectQueryNoLimit),
sortDescriptors: [sortDescriptor]) (_, results, error) in
guard error == nil else
print("Error: \(error!.localizedDescription)")
return
completion(results?[0] as? HKQuantitySample)
self.healthStore.execute(query)
【讨论】:
不只是复制和粘贴代码,您应该详细说明为什么您认为您的代码可以工作。 我认为代码中已经有适当的 cmets。这段代码对我有用 这段代码放在哪里?内部接口控制器? 因为在我的情况下,它说 self.heartRateQuery 它说未定义对 interfacecontroller 的引用 ... 'InterfaceController' 类型的值没有成员 'heartRateQuery';您的意思是“heartRateLabel”吗?以上是关于从 healthKit 中提取心率的主要内容,如果未能解决你的问题,请参考以下文章