即使 Apple Watch 屏幕关闭也能访问锻炼数据

Access workout data even when apple watch screen turn off

我在没有锻炼的情况下在苹果手表上成功获得了实时心率数据os 2.但是当苹果手表屏幕关闭时,我的完成块不再被调用。我想继续实时管理这些数据,并在心率过低时让我的 phone 响铃。 也许我可以让 iphone perma 上的应用程序打开,也许它可以在这次锻炼期间访问 healthkit 数据? 你认为这行得通吗?或者你有别的想法吗?

此致

根据设计,当手表屏幕关闭时,不允许 watchOS 2 应用 运行。您无法更改此行为。

嘿,我找到了解决方案:

我将 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];