1

我正在尝试做一件非常基本的事情:设置一个 HKObserverQuery 以便我可以知道各种数据点何时更改(我已确保用户已授权应用程序使用相关数据点。)无论出于何种原因,我可以在每次启动应用程序时触发查询,但是当我关闭应用程序、进入 Health 应用程序并手动更新数据点时它不会触发。我已经进行了大量的搜索,但未能成功使用其他人发布的代码,他们说对他们有用的代码。

我已经进行 Cocoa/Objective C 开发两周了,所以我确定我遗漏了一些明显的东西,但我看不出它是什么。这里的任何指导都会很棒,即使它只是关于调试的建议。由于应用程序本身已关闭,并且我没有得到任何可能在控制台中注销的信息,因此我对正在发生的事情一无所知。

我用于观察者查询的代码如下:

   HKQuantityType *heartRate = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
    [self.healthStore enableBackgroundDeliveryForType:heartRate frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {
        if (success) {
            NSLog(@"observing heart rate");
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.bodbot.com/Scripts/wearable_heartrate_changed.php"]];
        }else{
            NSLog(@"FAILED observing heart rate");
        }
    }];
    HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:heartRate predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) {
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.bodbot.com/Scripts/wearable_heartrate_changed.php"]];
    }];

    [self.healthStore executeQuery:query];

谢谢!

4

2 回答 2

3

我发现,凭经验(不是来自文档),观察者查询在模拟器中运行时不会触发,但在设备上运行时会触发。而且我没有打开后台模式功能。

于 2015-09-25T14:43:46.937 回答
0

当你在 iOS 上挂起一个应用程序时,默认情况下它会停止运行,除非它接受了后台任务断言或具有后台模式权利。该应用程序在未运行时无法接收通知。HealthKit 有一个功能,当有特定类型的新样本时,它可以在后台唤醒你的应用程序。请参阅 HKHealthStore 的管理后台交付文档。将其与 HKObserverQuery 结合使用,以便在有新数据时收到通知,即使您的应用程序尚未运行。

于 2015-03-23T17:27:00.087 回答