我正在尝试跟踪会话期间采取的用户步骤。这些会话的时间从30秒到30分钟不等。我开始会议并开始走动,然后一分钟后我停止会议。这总是返回0步。这是我正在运行的代码。
func readUserSteps(startDate:NSDate, endDate:NSDate) {
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 {
print("There was an error running the query: \(error)")
} else {
var stepCount:Double = 0
for steps in results as! [HKQuantitySample]
{
stepCount += steps.quantity.doubleValueForUnit(HKUnit.countUnit())
}
print("Steps Taken: \(stepCount)")
}
})
self.healthKitStore.executeQuery(query)
}
我将当前日期保存为:
let startTime = NSDate()
代表会话的开始,一旦用户停止了会话,我就将会话的结束保存为:let endTime = NSDate()
。然后,我用创建的这两个变量调用上面的函数。不幸的是,“ stepCount”总是返回0。 最佳答案
如果您只想计算用户的iPhone或Apple Watch记录的步数,我建议改用CMPedometer API,因为它将始终具有最新记录。但是,如果您仍然想使用HealthKit,则需要通过执行任何具有updateHandler
属性(HKObserverQuery,或HKStatisticsCollectionQuery)。在会话开始时使用更新处理程序执行这些查询之一,以使HealthKit更频繁地导入步数。HKObserverQuery
仅在HealthKit中有新的步骤计数时通知您,因此在会话结束时,您需要重新查询总数。另一方面,HKStatisticsCollectionQuery
和HKAnchoredObjectQuery
可以在会话运行时将结果流式传输到您的应用程序,这可能会提高性能。
最后,请注意仅对HKQuantitySamples
的值求和以计算总步数。来自多个来源的HealthKit数据可能会在时间上重叠。例如,Apple Watch用户在一天中既佩戴手表又携带手机时,可以在HealthKit中获得多个步骤信息。因此,最好使用HKStatisticsQuery
或HKStatisticsCollectionQuery
来计算总和,因为这样可以避免重复计算重叠的样本。
关于ios - iOS HealthKit跟踪 session 期间的用户步骤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37547197/