即使 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];
我在没有锻炼的情况下在苹果手表上成功获得了实时心率数据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];