我成功地在Apple Watch OS 2上获取了实时心率数据,但当Apple Watch屏幕关闭时,我的完成块不再被调用。我希望能够继续管理这些实时数据,并在心率过低时让我的手机响起来。
也许我可以让iPhone上的应用程序一直打开,并且在此期间可以访问HealthKit数据?
你认为这可能有用吗?或者你有其他想法吗?
敬礼
敬礼
嘿,我找到了一个解决方案:
我使用以下方法将 iPhone 应用程序保持在前台:
[UIApplication sharedApplication].idleTimerDisabled = YES
使用与Apple Watch相同的查询(HKAnchoredObjectQuery),我可以访问最新的健康数据。即使我的Apple Watch关闭了(在运动会话期间),我也可以获取实时心率数据。
HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKAnchoredObjectQuery *heartRateQuery = [[HKAnchoredObjectQuery alloc]
initWithType:type
predicate:nil
anchor:self.anchor
limit:HKObjectQueryNoLimit
resultsHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable sampleObjects, NSArray<HKDeletedObject *> * _Nullable deletedObjects, HKQueryAnchor * _Nullable newAnchor, NSError * _Nullable error) {
if (error) {
// Perform proper error handling here...
NSLog(@"*** An error occured while performing the anchored object query. %@ ***",
error.localizedDescription);
}
self.anchor = newAnchor;
HKQuantitySample *sample = (HKQuantitySample *)[sampleObjects firstObject];
if (sample) {
double value = [sample.quantity doubleValueForUnit:[HKUnit unitFromString:@"count/min"]];
dispatch_async(dispatch_get_main_queue(), ^(void){
self.heartrateLabel.text = [NSString stringWithFormat:@"%0.0f",value];
});
NSLog([NSString stringWithFormat:@"%0.0f",value]);
[self.hkStore stopQuery:heartRateQuery];
}
}];
[self.hkStore executeQuery:heartRateQuery];