2017-06-15 277 views
0

我能夠使用以下代碼從HealthKit讀取平均心率數據一段時間(鍛鍊持續時間)。Swift HealthKit觸發心率示例

但是,當我查看Apple Health應用程序時,它顯示Apple Watch的心率採樣很少發生(每15-30分鐘)。這使得我在這段時間的平均人力資源讀數相當不準確。

如何觸發HealthKit從手錶採樣(採集)心率數據並將其寫入HealthKit?

let endDate = (calendar as NSCalendar).date(byAdding: NSCalendar.Unit.minute, value: duration, to: startDate, options: NSCalendar.Options()) 
    let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions()) 

    let squery = HKStatisticsQuery(quantityType: heartRateType, quantitySamplePredicate: predicate, options: HKStatisticsOptions.discreteAverage, completionHandler: { (qurt, result, errval) -> Void in 

     guard errval == nil else { print("error"); completion(0.0, errval); return } 

     var averageHeartRate : Double = 0.0 
     if (result != nil && result!.averageQuantity() != nil) { 
      let quantity : HKQuantity = result!.averageQuantity()! 
      averageHeartRate = quantity.doubleValue(for: HKUnit.count().unitDivided(by: HKUnit.minute())) 
     } 
    }) 
+0

您是否在進行測量之前開始了「HKWorkoutSession」? –

+0

@DávidPásztor我沒有,一旦我開始它是好的,謝謝! – achen1217

+0

@DávidPásztor我開始鍛鍊,但是當我打電話給結束時,似乎並沒有停止。 hr監視器繼續保持運行狀態,手錶應用程序保持在前臺。任何想法如何我可以阻止這一點? – achen1217

回答

1

從Apple關注得到更頻繁的心臟率數據,用戶必須運行在他們眼皮底下的應用程序,正在跟蹤的HKWorkoutSession。如果您的應用有配對的watchOS應用來跟蹤鍛鍊,則可以使用startWatchApp(with workoutConfiguration:completion:)從iPhone開始鍛鍊。

+0

謝謝,我補充說,這解決了我的問題! 注意我還需要添加WKBackgroundModes和UIBackgroundModes – achen1217

+0

@ achen1217如果這解決了您的問題,請將答案標記爲已接受。謝謝! – Allan

+0

我開始鍛鍊,但是當我打電話給結束會話時,它似乎並沒有停止。 hr監視器繼續保持運行狀態,手錶應用程序保持在前臺。任何想法如何我可以阻止這一點? – achen1217