2016-09-30 259 views
0

我正在创建一个读取HeartRate数据的iWatch应用程序,然后我使用它绘制一些图表。该应用程序中有2个按钮,一个用于暂停锻炼时段,另一个用于恢复锻炼时段。在暂停按钮的点击,我打电话healthStore的pauseWorkoutSession方法:为什么PauseWorkoutSession健康存储不会暂停会话?

恢复按钮的
healthStore.pauseWorkoutSession(workoutSession!) 

的OnClick,我打电话healthStore的resumeWorkoutSession方法:

healthStore.resumeWorkoutSession(workoutSession!) 

要获得心率数据,我跑了以下代码:

let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)! 
      let datePredicate = HKQuery.predicateForSamplesWithStartDate(instanceDel.workoutSessionStartDate, endDate: nil, options: .StrictStartDate) 


      let updateHandler: (HKAnchoredObjectQuery,[HKSample]?,[HKDeletedObject]?,HKQueryAnchor?, 
       NSError?)-> Void = {query, samples, deleteObjects, newAnchor, error in 

        if !self.instanceDel.workoutPaused { 
         //do something 
        } 
      } 

heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: datePredicate, anchor: nil, limit: Int(HKObjectQueryNoLimit) , resultsHandler: updateHandler)    
heartRateQuery!.updateHandler = updateHandler 
instanceDel.healthStore.executeQuery(heartRateQuery!) 

我面临的问题是更新处理程序不断被调用,并且新的心率值是连续的即使锻炼暂停,也无需添加到样本数组中。 pauseWorkoutSession究竟做了什么? Isn' 它假设暂停锻炼会话,以便新的心率读数到来?

回答

1

暂停锻炼不是为了防止心率采样或任何其他类型的样本被watchOS收集。以这种方式考虑 - 即使手表没有记录锻炼,它仍在收集心率,步数,距离,卡路里等。

如果您想忽略会话暂停时记录的样本,你应该停止查询或忽略样本。

+0

您是否知道PauseWorkoutSession方法的确切功能?为什么我会称这种方法? @Allan –

+0

暂停锻炼会产生暂停HKWorkoutEvent。在创建HKWorkout以确定锻炼的总暂停时间时,将使用传递到您的HKWorkoutSessionDelegate的事件。 – Allan

+0

当锻炼活动类型正在运行时,Watch可以在您未运行时自动检测并暂停锻炼,生成可用于确定总未停顿时间的HKWorkoutEvent。但是,如果我手动暂停并恢复锻炼,我可以非常容易地计算未使用HKWorkoutEvent时的总暂停时间,因为我知道按下暂停和恢复按钮的时间。那么有没有使用调用PauseWorkoutSession呢 –