2

我正在尝试从 HealthKit 中提取步骤数据。

我想创建按小时分组的步骤数据摘要。NSPredicate目前,我可以提取with提供的日期范围内的所有数据样本HKSampleQuery。我还可以获得日期范围与HKStatisticsQuery.

我要问的是是否有办法按小时对样本或统计数据进行汇总。在 SQL 中,我会这样写:

SELECT HOUR(date), SUM(steps) FROM healthkit WHERE date BETWEEN 'blah' AND 'blah' GROUP BY 1;

我是否真的要查询 HKStatistics 24 x 31 次才能写入按小时分组的最后一个月的步数数据?因为这似乎相当低效,尤其是在resultsHandler实施方式方面。

4

1 回答 1

9

您应该使用HKStatisticsCollectionQuery可以按时间间隔执行分组的位置。一个示例存根代码是:

NSDate *startDate, *endDate, *anchorDate; // Whatever you need in your case    
HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];

// Your interval: sum by hour
NSDateComponents *intervalComponents = [[NSDateComponents alloc] init];
intervalComponents.hour = 1;

// Example predicate
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:fromDate endDate:toDate options:HKQueryOptionStrictStartDate];

HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:type quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum anchorDate:anchorDate intervalComponents:intervalComponents];
    query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *result, NSError *error) {
        // do something with the results
    };
[healthStore executeQuery:query];

您可以在HKStatisticsCollectionQuery 文档中阅读更多详细信息

于 2014-10-13T10:14:04.230 回答