【发布时间】:2015-10-28 22:42:47
【问题描述】:
我正在编写一个简单的应用程序来监控 HealthKit 中的心率 (HKQuantityTypeIdentifierHeartRate),只要将新的健康率值写入 HealthKit。
正如在 WWDC2015(第 203 届会议)上看到的,我正在使用一个 HKAnchoredObjectQuery,它应该适用于添加和删除对象。每当我启动应用程序时,我都会调用 HKQuery 来获取最新的对象,而 executingQuery 工作正常!!!但是即使样本在那里,我也没有得到新的样本,但是如果我将应用程序带到后台并再次回到前台,我将获得所有新的心率。这是一个错误吗?或者我应该怎么做才能在不将应用程序置于后台和前台的情况下监测心率?
这是我正在使用的代码(所有内容都存储在 AppDelegate 中),我从 didFinishLaunchingWithOptions 调用 [self requestAccessDataTypes];:
[healthStore enableBackgroundDeliveryForType:sampleType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {}];
HKQuery *query = [self createHeartRateStreamingQuery:datum];
if (query) {
[healthStore executeQuery:query];
}
else
{
NSLog(@"workout can not start");
}
-(HKQuery*)createHeartRateStreamingQuery:(NSDate*)workoutStartDate
{
NSLog(@"%@ - createHeartRateStreamingQuery", [self class]);
if ([HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]) {
HKQuantityType *quantityType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKAnchoredObjectQuery * heartRateQuery = [[HKAnchoredObjectQuery alloc] initWithType:quantityType predicate:nil anchor:anchor limit:HKObjectQueryNoLimit resultsHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable sampleObjects, NSArray<HKDeletedObject *> * _Nullable deletedObjects, HKQueryAnchor * _Nullable newAnchor, NSError * _Nullable error) {
if (!error) {
anchor = newAnchor;
[self updateHeartRate:sampleObjects];
}
}];
heartRateQuery.updateHandler = ^void(HKAnchoredObjectQuery *query, NSArray<__kindof HKSample *> * __nullable addedObjects, NSArray<HKDeletedObject *> * __nullable deletedObjects, HKQueryAnchor * __nullable newAnchor, NSError * __nullable error)
{
if (!error) {
anchor = newAnchor;
[self updateHeartRate:addedObjects];
}
};
return heartRateQuery;
}
return nil;
}
【问题讨论】:
标签: ios ios9 healthkit hkhealthstore