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

Posted

技术标签:

【中文标题】如何从 HealthKit 中获取每日平均步数【英文标题】:How can I get daily average steps form HealthKit 【发布时间】:2015-02-02 20:16:23 【问题描述】:

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

我已经得到了这个代码:

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 数组中的值是否正确。

【问题讨论】:

那么您的具体问题是什么?您的代码的哪一部分不工作,结果不是您所期望的? 我真的有问题,我只是卡住了。我不知道如何访问/添加存储在 HKQuantitySample 数组中的日期 您是否按预期从查询中获取所有数据?你唯一在这个 for 循环中苦苦挣扎的部分是什么?如果您希望人们帮助您,您真的必须更新您的问题以使其更具体...... 你是对的。我写了更多,但我被删除了。 这正是HKStatisticsQueryHKStatisticsCollectionQuery 的设计目的。不要自己做数学,让框架为你做!统计查询可以为您提供与您提供的谓词匹配的样本的总和、最小值、最大值和平均值。 【参考方案1】:

万一其他人试图以不那么糟糕的方式解决这个问题......

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

如果您尝试获取平均步数,Xcode 会输出: 统计选项 HKStatisticsOptionDiscreteAverage 与累积数据类型 HKQuantityTypeIdentifierStepCount 不兼容

最佳解决方案

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

【讨论】:

此解决方案有效,但存在一个问题......这并不意味着您每天都有样本,但总而言之,您除以天数,这不是一个好的结果。想象一下,您在星期一有 700 步,而在一周的剩余时间里没有步数,因此您每天有 100 步……这对于某些应用程序来说可能不是一个很好的结果。【参考方案2】:

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

var dailyAVG:Double = 0
for steps in results as [HKQuantitySample]

   // add values to dailyAVG
   dailyAVG += steps.quantity.doubleValueForUnit(HKUnit.countUnit())

【讨论】:

以上是关于如何从 HealthKit 中获取每日平均步数的主要内容,如果未能解决你的问题,请参考以下文章

如何获取以前日期的 HealthKit 总步数

如何获取以前日期的 HealthKit 总步数

一天的谓词格式,用于搜索从 HealthKit 检索的 Steps Sample Array

一天的谓词格式,用于搜索从 HealthKit 检索的 Steps Sample Array

iOS获取健康步数从加速计到healthkit

有关HealthKit的那些事