4

我需要为用户在任何特定日期每小时采取的步骤绘制图表。但是,如果用户的步骤从今天下午 3:58 开始,到今天下午 4:10 结束,那么我在这段时间内只得到一个 HKStatistics 对象。我无法将这些数据分成两个样本,因为我需要在 3-4 pm 时段和 4-5 pm 时段采取步骤。

  static func getSteps(date: Date, duration: DateComponents, completion: @escaping ([HKSample]) -> Void) {
        let quantityType : Set = [HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!]

        let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
        let startOfDay = Calendar.current.startOfDay(for: date)
        if let endOfDay = Calendar.current.date(byAdding: duration, to: startOfDay) {
            var interval = DateComponents()
            interval.hour = 1
            let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: endOfDay, options: .strictStartDate)

            let query = HKSampleQuery.init(sampleType:stepsQuantityType,
                                                 predicate: predicate,
                                                 limit: HKObjectQueryNoLimit,
                                                 sortDescriptors: nil,
                                                 resultsHandler: { (query, results, error) in
                                                    guard let result = results else {

                                                                            return
                                                                        }
                                                   // print("result healthkit",result.description)
                                                    //print("Total count:",)
                                                    completion(result)
            })

            healthStore.execute(query)
        }
    }
4

2 回答 2

3

不要HKSampleQuery用于图表数量类型。HKStatisticsCollectionQuery是为此目的而设计的,它将为您拆分属于图表不同区域的样本。有关如何构建查询和使用其结果的示例,请参阅文档。

于 2018-09-19T00:10:40.327 回答
1

你是对的,你不能拆分样本。这就是所有可用的信息。步骤不是一步一步存储的;它们被聚合成块以降低功率和存储要求(主要是功率;在硬件中累积一个值并定期读取它比每次检测到一个步骤时查询实时时钟更容易)。

为了做你正在讨论的事情,你需要平均一段时间内的步骤。因此,如果在 3:58p 到 4:07p 期间有 100 步,则平均每分钟 10 步,您将分配 20 步到 3p-4p 块和 80 步到 4p-5p 块。这是你掌握的最好的信息。

于 2018-09-18T13:08:21.813 回答