iOS HealthKit 在 session 期间跟踪用户步数

标签 ios objective-c swift session healthkit

我正在尝试跟踪用户在 session 期间采取的步骤。这些 session 可以是 30 秒到 30 分钟不等。我开始类(class)并开始四处走动,然后一分钟后我停止了类(class)。这总是返回 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() 来表示 session 的开始,一旦用户停止 session ,我将 session 的结束保存为如下:让 endTime = NSDate()。然后我用创建的这两个变量调用上面的函数。不幸的是,“stepCount”总是返回 0..我在这里做错了什么?

最佳答案

如果您只想计算 iPhone 或 Apple Watch 记录的用户步数,我建议使用 CMPedometer API,因为它始终拥有最新的记录。不过,如果您仍然想使用 HealthKit,则需要向 HealthKit 表明您的应用有兴趣通过执行任何具有 updateHandler 属性 ( HKObserverQuery ) 的查询类型来“观察”步骤, HKStatisticsCollectionQuery , 或 HKAnchoredObjectQuery ).在 session 开始时使用更新处理程序执行其中一个查询,以使 HealthKit 更频繁地导入步数。

HKObserverQuery 只会在 HealthKit 中出现新的步数时通知您,因此在 session 结束时您需要重新查询总数。另一方面,HKStatisticsCollectionQueryHKAnchoredObjectQuery 可以在 session 运行时将结果流式传输到您的应用,这可能会提高性能。

最后,请注意简单地对 HKQuantitySamples 的值求和以计算总步数。来自多个来源的 HealthKit 数据可以在时间上重叠。例如,Apple Watch 用户可以在 HealthKit 中获得一天中佩戴 watch 和携带手机期间的多个步数来源。因此,最好使用 HKStatisticsQueryHKStatisticsCollectionQuery 来计算总和,因为这样可以避免重复计算重叠样本。

关于iOS HealthKit 在 session 期间跟踪用户步数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547197/

相关文章:

ios - AFNetworking 完成 block 等到完成

ios - UITableViewCell ImageView 缩放不正确?

ios - 如何为这一层绘制CATransform3D?

ios - daisy NSOperation main 进入 super 可以接受吗?

ios - 在 Swift iOs 中使用 Parse 的 LocalStorage 出错

ios - firebase onDisconnectSetValue 未按预期工作

ios - 隐藏 UINavigationBar 3D touch

iphone - Apple 的 Reachability 类是否有更复杂的替代品?

ios - 中央调度、操作队列、异步、 View 将和确实消失

objective-c - 弱属性不使用 ARC 归零