如何从 HealthKit 获取每日平均步数

How can I get daily average steps form HealthKit

我正在尝试显示用户每天的步数。 但我真的不知道如何管理它。

我已经得到了这个代码:

let endDate = NSDate()
let startDate = NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitMonth, value: -1, toDate: endDate, options: nil)
    
let weightSampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: .None)
    
let query = HKSampleQuery(sampleType: weightSampleType, predicate: predicate, limit: 0, sortDescriptors: nil, resultsHandler: {
        (query, results, error) in
        if results == nil {
            println("There was an error running the query: \(error)")
        }
        
        dispatch_async(dispatch_get_main_queue()) {
            var dailyAVG = Int()
            var steps = results as [HKQuantitySample]
            for var i = 0; i < results.count; i++
            {
                //results[i] add values to dailyAVG
            }
        }
    })
    
 self.healthKitStore.executeQuery(query)

据我所知,查询得到了所有需要的数据。但我不知道如何从 HKQuantitySample 中获取值。所以我无法测试 HKQuantitySample 数组中的值是否正确。

您需要遍历 steps 而不是 results,然后使用每个 HKQuantitySample 结果 quantity 属性 来获取该样本中的步骤数,例如:

var dailyAVG:Double = 0
for steps in results as [HKQuantitySample]
{
   // add values to dailyAVG
   dailyAVG += steps.quantity.doubleValueForUnit(HKUnit.countUnit())
}

以防其他人试图以 not-so-terrible 方式解决此问题...

目前,使用 HKStatisticsQueryHKStatisticsCollectionQuery 似乎无法获得平均步数。您只能对离散数据类型使用 HKStatisticsOptionDiscreteAverage。如果查看 HKTypeIdentifiers 的 header,您会发现 HKQuantityTypeIdentifierStepCount 是累积数据类型。

如果您尝试获取平均步数,Xcode 会显示: 统计选项 HKStatisticsOptionDiscreteAverage 与累积数据类型 HKQuantityTypeIdentifierStepCount.

不兼容

最佳解决方案

获取用户完成的总步数。您可以指定两个日期之间的时间段。将总步数除以两个日期之间的天数。