From fc2e898e7bc95e300555701cc15bcbc2d4c005a1 Mon Sep 17 00:00:00 2001 From: Greg Wilson Date: Tue, 28 Jun 2016 22:15:25 -0400 Subject: [PATCH] added fetchCumulativeSumStatisticsCollection method to Queries --- RCTAppleHealthKit/RCTAppleHealthKit+Queries.h | 5 + RCTAppleHealthKit/RCTAppleHealthKit+Queries.m | 110 ++++++++++++++++-- 2 files changed, 107 insertions(+), 8 deletions(-) diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h index d6ad8ae..608f961 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h @@ -14,4 +14,9 @@ - (void)fetchSumOfSamplesTodayForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit completion:(void (^)(double, NSError *))completionHandler; - (void)fetchSumOfSamplesOnDayForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit day:(NSDate *)day completion:(void (^)(double, NSError *))completionHandler; +- (void)fetchCumulativeSumStatisticsCollection:(HKQuantityType *)quantityType + unit:(HKUnit *)unit + startDate:(NSDate *)startDate + endDate:(NSDate *)endDate + completion:(void (^)(NSArray *, NSError *))completionHandler; @end diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m index 7e0752e..0d1c25a 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m @@ -65,20 +65,114 @@ NSPredicate *predicate = [RCTAppleHealthKit predicateForSamplesOnDay:day]; HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:quantityType - quantitySamplePredicate:predicate - options:HKStatisticsOptionCumulativeSum - completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) { - HKQuantity *sum = [result sumQuantity]; - - if (completionHandler) { + quantitySamplePredicate:predicate + options:HKStatisticsOptionCumulativeSum + completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) { + HKQuantity *sum = [result sumQuantity]; + if (completionHandler) { double value = [sum doubleValueForUnit:unit]; completionHandler(value, error); - } - }]; + } + }]; [self.healthStore executeQuery:query]; } +//- (void)fetchSumOfSamplesBetweenDatesForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit startDate:(NSDate *)startDate endDate:(NSDate *)endDate completion:(void (^)(NSArray *, NSError *))completionHandler { +// NSPredicate *predicate = [RCTAppleHealthKit predicateForSamplesBetweenDates:startDate endDate:endDate]; +// +// HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:quantityType +// quantitySamplePredicate:predicate +// options:HKStatisticsOptionCumulativeSum +// completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) { +// HKQuantity *sum = [result sumQuantity]; +// if (completionHandler) { +// double value = [sum doubleValueForUnit:unit]; +// completionHandler(value, error); +// } +// }]; +// +// [self.healthStore executeQuery:query]; +//} + + + + + +- (void)fetchCumulativeSumStatisticsCollection:(HKQuantityType *)quantityType + unit:(HKUnit *)unit + startDate:(NSDate *)startDate + endDate:(NSDate *)endDate + completion:(void (^)(NSArray *, NSError *))completionHandler { + + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *interval = [[NSDateComponents alloc] init]; + interval.day = 1; + + NSDateComponents *anchorComponents = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear + fromDate:[NSDate date]]; + anchorComponents.hour = 0; + NSDate *anchorDate = [calendar dateFromComponents:anchorComponents]; +// HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; + +// Create the query + HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:quantityType + quantitySamplePredicate:nil + options:HKStatisticsOptionCumulativeSum + anchorDate:anchorDate + intervalComponents:interval]; + +// Set the results handler + query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) { + if (error) { + // Perform proper error handling here + NSLog(@"*** An error occurred while calculating the statistics: %@ ***",error.localizedDescription); + } + +// NSDate *endDate = [NSDate date]; +// NSDate *startDate = [calendar dateByAddingUnit:NSCalendarUnitDay +// value:-7 +// toDate:endDate +// options:0]; + + // Plot the daily step counts over the past 7 days + + NSMutableArray *data = [NSMutableArray arrayWithCapacity:1]; + + [results enumerateStatisticsFromDate:startDate + toDate:endDate + withBlock:^(HKStatistics *result, BOOL *stop) { + + HKQuantity *quantity = result.sumQuantity; + if (quantity) { + NSDate *date = result.startDate; + double value = [quantity doubleValueForUnit:[HKUnit countUnit]]; + NSLog(@"%@: %f", date, value); + + NSString *dateString = [RCTAppleHealthKit buildISO8601StringFromDate:date]; + + NSArray *elem = @[dateString, @(value)]; + + [data addObject:elem]; + } + + }]; + +// NSArray *arr = @[@"Mercedes-Benz", @"BMW", @"Porsche", @"Opel", @"Volkswagen", @"Audi"]; + NSError *err; + completionHandler(data, err); + + }; + + [self.healthStore executeQuery:query]; +} + + + + + + + @end -- 2.26.2