繁体   English   中英

如何按小时计算HealthKit Swift 4的步数

[英]How to get steps count on hourly basis from HealthKit Swift 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)
        }
    }

不要使用HKSampleQuery绘制数量类型图表。 HKStatisticsCollectionQuery旨在用于此目的,并将为您分割落入图表单独区域的样本。 有关如何构建查询并使用其结果的示例,请参阅文档

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM