如何从 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 方式解决此问题...
目前,使用 HKStatisticsQuery
或 HKStatisticsCollectionQuery
似乎无法获得平均步数。您只能对离散数据类型使用 HKStatisticsOptionDiscreteAverage
。如果查看 HKTypeIdentifiers
的 header,您会发现 HKQuantityTypeIdentifierStepCount
是累积数据类型。
如果您尝试获取平均步数,Xcode 会显示:
统计选项 HKStatisticsOptionDiscreteAverage 与累积数据类型 HKQuantityTypeIdentifierStepCount.
不兼容
最佳解决方案
获取用户完成的总步数。您可以指定两个日期之间的时间段。将总步数除以两个日期之间的天数。
我正在尝试显示用户每天的步数。 但我真的不知道如何管理它。
我已经得到了这个代码:
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 方式解决此问题...
目前,使用 HKStatisticsQuery
或 HKStatisticsCollectionQuery
似乎无法获得平均步数。您只能对离散数据类型使用 HKStatisticsOptionDiscreteAverage
。如果查看 HKTypeIdentifiers
的 header,您会发现 HKQuantityTypeIdentifierStepCount
是累积数据类型。
如果您尝试获取平均步数,Xcode 会显示: 统计选项 HKStatisticsOptionDiscreteAverage 与累积数据类型 HKQuantityTypeIdentifierStepCount.
不兼容最佳解决方案
获取用户完成的总步数。您可以指定两个日期之间的时间段。将总步数除以两个日期之间的天数。