HealthKit 读取数据心率和血压“同步后的最新更新”
Posted
技术标签:
【中文标题】HealthKit 读取数据心率和血压“同步后的最新更新”【英文标题】:HealthKit Read data Heart Reat and BloodPressure 'latest update after sync' 【发布时间】:2018-09-13 04:26:57 【问题描述】:我正在从 HealthKit 同步 Heart Reat、BloodPressure 数据。
这种方法的问题是当用户输入不会同步的历史数据时。我如何执行相同的查询,但使用 CreationDate(而不是 StartDate)或某种将历史值标识为较新的数据库 ID?
我只想从 healthkit 中过滤掉所有新创建的值。
-(void)getSpecificHealthKitDataHeartReat:(NSDate*)myDate
NSDateFormatter *dtFormat = [[NSDateFormatter alloc] init];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components];
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionNone];
//[HKQuery predicateForObjectWithUUID:(nonnull NSUUID *)]
//Read HeartRate
HKHealthStore *healthStore = [[HKHealthStore alloc] init];
NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierStartDate ascending:YES];
HKQuantityType *heartRateType2 = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKSampleQuery *sampleQuery2 = [[HKSampleQuery alloc] initWithSampleType:heartRateType2 predicate:predicate limit:0 sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error)
if (!results)
NSLog(@"There are no heart rate results. The error was: %@.", error);
return;
else
NSMutableArray *hrArray = [[NSMutableArray alloc]init];
for(HKQuantitySample *samples in results)
HKQuantity *hrQuantity = [samples quantity];
// double hr = [hrQuantity doubleValueForUnit:[HKUnit unitFromString:@"count/min"]];
double hr = [hrQuantity doubleValueForUnit: [[HKUnit countUnit] unitDividedByUnit:[HKUnit minuteUnit]]];
NSLog(@"hr %f",hr);
NSLog(@"startDate %@",samples.startDate);
NSLog(@"endDate %@",samples.endDate);
];
// Execute the query
[healthStore executeQuery:sampleQuery2];
【问题讨论】:
【参考方案1】:使用HKAnchoredObjectQuery
(文档here)。它正是为这种用例而设计的。
【讨论】:
感谢您的建议。但是 1)我需要心率和血压的代码,2)目标 c 中的必需代码。 对不起,我没听懂你的意思。以上是关于HealthKit 读取数据心率和血压“同步后的最新更新”的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2.0:读取 HealthKit 心率数据 - 在展开 Optional 时意外发现 nil