From fbeb39802527a3ae65a341cb35fc90201b728f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B2=9D=E6=96=AF=E9=84=A7=E4=B8=8D=E5=88=A9=E5=A4=9A?= Date: Wed, 4 Sep 2019 10:08:07 +0800 Subject: [PATCH] =?UTF-8?q?HRB-3175=20=E4=BF=AE=E6=94=B9=E9=AB=94=E9=87=8D?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E8=B3=87=E6=96=99=E7=82=BA=20Double=20?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RCTAppleHealthKit+Methods_Body.m | 2 +- RCTAppleHealthKit/RCTAppleHealthKit+Queries.h | 6 ++ RCTAppleHealthKit/RCTAppleHealthKit+Queries.m | 78 +++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Body.m b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Body.m index f29f7f8..cca68ab 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Body.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Body.m @@ -60,7 +60,7 @@ } NSPredicate * predicate = [RCTAppleHealthKit predicateForSamplesBetweenDates:startDate endDate:endDate]; - [self fetchQuantitySamplesOfType:weightType + [self fetchQuantityDoubleSamplesOfType:weightType unit:unit predicate:predicate ascending:ascending diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h index 4ff706c..6531a0f 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h @@ -24,6 +24,12 @@ ascending:(BOOL)asc limit:(NSUInteger)lim completion:(void (^)(NSArray *, NSError *))completion; +- (void)fetchQuantityDoubleSamplesOfType:(HKQuantityType *)quantityType + unit:(HKUnit *)unit + predicate:(NSPredicate *)predicate + ascending:(BOOL)asc + limit:(NSUInteger)lim + completion:(void (^)(NSArray *, NSError *))completion; - (void)fetchCorrelationSamplesOfType:(HKQuantityType *)quantityType unit:(HKUnit *)unit predicate:(NSPredicate *)predicate diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m index 504dcbf..1c2a783 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m @@ -129,6 +129,84 @@ } +- (void)fetchQuantityDoubleSamplesOfType:(HKQuantityType *)quantityType + unit:(HKUnit *)unit + predicate:(NSPredicate *)predicate + ascending:(BOOL)asc + limit:(NSUInteger)lim + completion:(void (^)(NSArray *, NSError *))completion { + + NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate + ascending:asc]; + + // declare the block + void (^handlerBlock)(HKSampleQuery *query, NSArray *results, NSError *error); + // create and assign the block + handlerBlock = ^(HKSampleQuery *query, NSArray *results, NSError *error) { + if (!results) { + if (completion) { + completion(nil, error); + } + return; + } + + if (completion) { + NSMutableArray *data = [NSMutableArray arrayWithCapacity:1]; + + dispatch_async(dispatch_get_main_queue(), ^{ + + for (HKQuantitySample *sample in results) { + HKQuantity *quantity = sample.quantity; + double value = [quantity doubleValueForUnit:unit]; + + int startDateTimestamp = [RCTAppleHealthKit buildTimestampFromDate:sample.startDate]; + int endDateTimestamp = [RCTAppleHealthKit buildTimestampFromDate:sample.endDate]; + + NSString *deviceName = sample.device.name ? sample.device.name : @""; + NSString *deviceManufacturer = sample.device.manufacturer ? sample.device.manufacturer : @""; + NSString *deviceHardwareVer = sample.device.hardwareVersion ? sample.device.hardwareVersion : @""; + NSString *deviceSoftwareVer = sample.device.softwareVersion ? sample.device.softwareVersion : @""; + + NSString *sourceName = sample.sourceRevision.source.name; + NSString *sourceId = sample.sourceRevision.source.bundleIdentifier; + + NSString *uuid = sample.UUID.UUIDString; + + NSString *metadata = [sample.metadata == nil ? @"" : sample.metadata.description stringByReplacingOccurrencesOfString:@" " withString:@""]; + metadata = [metadata stringByReplacingOccurrencesOfString:@"\r" withString:@""]; + metadata = [metadata stringByReplacingOccurrencesOfString:@"\n" withString:@""]; + + NSDictionary *elem = @{ + @"value" : @(value), + @"startDate" : @(startDateTimestamp), + @"endDate" : @(endDateTimestamp), + @"deviceName" : deviceName, + @"deviceManufacturer" : deviceManufacturer, + @"deviceHardware" : deviceHardwareVer, + @"deviceSoftware" : deviceSoftwareVer, + @"sourceName" : sourceName, + @"sourceId" : sourceId, + @"unit" : unit.description, + @"uuid" : uuid, + @"metadata" : metadata + }; + + [data addObject:elem]; + } + + completion(data, error); + }); + } + }; + + HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType + predicate:predicate + limit:lim + sortDescriptors:@[timeSortDescriptor] + resultsHandler:handlerBlock]; + + [self.healthStore executeQuery:query]; +} -- 2.26.2