Commit c2cb0f2d authored by 王品堯's avatar 王品堯

HA-52 調整metadata的判斷, 調整取得血壓、睡眠、步數的回傳值, 增加參數改變步數interval

parent 9175a4f4
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
@interface RCTAppleHealthKit (Methods_Fitness) @interface RCTAppleHealthKit (Methods_Fitness)
- (void)fitness_getStepCountOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_getStepCountOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_geStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_saveSteps:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_saveSteps:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)fitness_initializeStepEventObserver:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_initializeStepEventObserver:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
......
...@@ -49,6 +49,40 @@ ...@@ -49,6 +49,40 @@
} }
- (void)fitness_geStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit countUnit]];
NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit];
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
if(startDate == nil){
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
}
HKQuantityType *stepCountType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
NSPredicate * predicate = [RCTAppleHealthKit predicateForSamplesBetweenDates:startDate endDate:endDate];
[self fetchQuantitySamplesOfType:stepCountType
unit:unit
predicate:predicate
ascending:ascending
limit:limit
completion:^(NSArray *results, NSError *error) {
if(results){
callback(@[[NSNull null], results]);
return;
} else {
NSLog(@"error getting heart rate samples: %@", error);
callback(@[RCTMakeError(@"error getting heart rate samples", nil, nil)]);
return;
}
}];
}
- (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback - (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{ {
HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit countUnit]]; HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit countUnit]];
...@@ -56,6 +90,7 @@ ...@@ -56,6 +90,7 @@
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false]; BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil]; NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]]; NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
NSString *gap = [input objectForKey: @"gap"];
if(startDate == nil){ if(startDate == nil){
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]); callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return; return;
...@@ -69,6 +104,7 @@ ...@@ -69,6 +104,7 @@
endDate:endDate endDate:endDate
ascending:ascending ascending:ascending
limit:limit limit:limit
gap:gap
completion:^(NSArray *arr, NSError *err){ completion:^(NSArray *arr, NSError *err){
if (err != nil) { if (err != nil) {
NSLog(@"error with fetchCumulativeSumStatisticsCollection: %@", err); NSLog(@"error with fetchCumulativeSumStatisticsCollection: %@", err);
......
...@@ -107,11 +107,40 @@ ...@@ -107,11 +107,40 @@
HKQuantitySample *bloodPressureSystolicValue = [bloodPressureValues objectsForType:systolicType].anyObject; HKQuantitySample *bloodPressureSystolicValue = [bloodPressureValues objectsForType:systolicType].anyObject;
HKQuantitySample *bloodPressureDiastolicValue = [bloodPressureValues objectsForType:diastolicType].anyObject; HKQuantitySample *bloodPressureDiastolicValue = [bloodPressureValues objectsForType:diastolicType].anyObject;
NSString *deviceName = bloodPressureSystolicValue.device.name ? bloodPressureSystolicValue.device.name : @"";
NSString *deviceManufacturer = bloodPressureSystolicValue.device.manufacturer ? bloodPressureSystolicValue.device.manufacturer : @"";
NSString *deviceHardwareVer = bloodPressureSystolicValue.device.hardwareVersion ? bloodPressureSystolicValue.device.hardwareVersion : @"";
NSString *deviceSoftwareVer = bloodPressureSystolicValue.device.softwareVersion ? bloodPressureSystolicValue.device.softwareVersion : @"";
NSString *sourceName = bloodPressureSystolicValue.sourceRevision.source.name;
NSString *sourceId = bloodPressureSystolicValue.sourceRevision.source.bundleIdentifier;
NSString *uuid = bloodPressureSystolicValue.UUID.UUIDString;
NSError *error;
NSDictionary *metaDict;
if(bloodPressureSystolicValue.metadata == nil){
metaDict = [[NSDictionary alloc] init];
}else{
metaDict = bloodPressureSystolicValue.metadata;
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:metaDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *elem = @{ NSDictionary *elem = @{
@"bloodPressureSystolicValue" : @([bloodPressureSystolicValue.quantity doubleValueForUnit:unit]), @"bloodPressureSystolicValue" : @([bloodPressureSystolicValue.quantity doubleValueForUnit:unit]),
@"bloodPressureDiastolicValue" : @([bloodPressureDiastolicValue.quantity doubleValueForUnit:unit]), @"bloodPressureDiastolicValue" : @([bloodPressureDiastolicValue.quantity doubleValueForUnit:unit]),
@"startDate" : [sample valueForKey:@"startDate"], @"startDate" : [sample valueForKey:@"startDate"],
@"endDate" : [sample valueForKey:@"endDate"], @"endDate" : [sample valueForKey:@"endDate"],
@"deviceName" : deviceName,
@"deviceManufacturer" : deviceManufacturer,
@"deviceHardware" : deviceHardwareVer,
@"deviceSoftware" : deviceSoftwareVer,
@"sourceName" : sourceName,
@"sourceId" : sourceId,
@"unit" : unit.description,
@"uuid" : uuid,
@"metadata" : metadata
}; };
[data addObject:elem]; [data addObject:elem];
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
endDate:(NSDate *)endDate endDate:(NSDate *)endDate
ascending:(BOOL)asc ascending:(BOOL)asc
limit:(NSUInteger)lim limit:(NSUInteger)lim
gap:(NSString *)gap
completion:(void (^)(NSArray *, NSError *))completionHandler; completion:(void (^)(NSArray *, NSError *))completionHandler;
......
...@@ -93,7 +93,13 @@ ...@@ -93,7 +93,13 @@
NSString *uuid = sample.UUID.UUIDString; NSString *uuid = sample.UUID.UUIDString;
NSError *error; NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:sample.metadata options:NSJSONWritingPrettyPrinted error:&error]; NSDictionary *metaDict;
if(sample.metadata == nil){
metaDict = [[NSDictionary alloc] init];
}else{
metaDict = sample.metadata;
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:metaDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *elem = @{ NSDictionary *elem = @{
...@@ -186,10 +192,38 @@ ...@@ -186,10 +192,38 @@
break; break;
} }
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;
NSError *error;
NSDictionary *metaDict;
if(sample.metadata == nil){
metaDict = [[NSDictionary alloc] init];
}else{
metaDict = sample.metadata;
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:metaDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *metadata =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *elem = @{ NSDictionary *elem = @{
@"value" : valueString, @"value" : valueString,
@"startDate" : startDateString, @"startDate" : startDateString,
@"endDate" : endDateString, @"endDate" : endDateString,
@"deviceName" : deviceName,
@"deviceManufacturer" : deviceManufacturer,
@"deviceHardware" : deviceHardwareVer,
@"deviceSoftware" : deviceSoftwareVer,
@"sourceName" : sourceName,
@"sourceId" : sourceId,
@"uuid" : uuid,
@"metadata" : metadata
}; };
[data addObject:elem]; [data addObject:elem];
...@@ -393,11 +427,16 @@ ...@@ -393,11 +427,16 @@
endDate:(NSDate *)endDate endDate:(NSDate *)endDate
ascending:(BOOL)asc ascending:(BOOL)asc
limit:(NSUInteger)lim limit:(NSUInteger)lim
gap:(NSString *)gap
completion:(void (^)(NSArray *, NSError *))completionHandler { completion:(void (^)(NSArray *, NSError *))completionHandler {
NSCalendar *calendar = [NSCalendar currentCalendar]; NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *interval = [[NSDateComponents alloc] init]; NSDateComponents *interval = [[NSDateComponents alloc] init];
if([gap isEqual: @"hour"]){
interval.hour = 1;
}else {
interval.day = 1; interval.day = 1;
}
NSDateComponents *anchorComponents = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear NSDateComponents *anchorComponents = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]]; fromDate:[NSDate date]];
......
...@@ -105,6 +105,11 @@ RCT_EXPORT_METHOD(getStepCount:(NSDictionary *)input callback:(RCTResponseSender ...@@ -105,6 +105,11 @@ RCT_EXPORT_METHOD(getStepCount:(NSDictionary *)input callback:(RCTResponseSender
[self fitness_getStepCountOnDay:input callback:callback]; [self fitness_getStepCountOnDay:input callback:callback];
} }
RCT_EXPORT_METHOD(getStepCountSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback)
{
[self fitness_geStepSamples:input callback:callback];
}
RCT_EXPORT_METHOD(getDailyStepCountSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) RCT_EXPORT_METHOD(getDailyStepCountSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback)
{ {
[self fitness_getDailyStepSamples:input callback:callback]; [self fitness_getDailyStepSamples:input callback:callback];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment