我正在尝试做一件非常基本的事情:设置一个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];谢谢!
发布于 2015-09-25 22:43:47
我发现,根据经验(不是从文档中),观察者查询在模拟器中运行时不会触发,但在设备上运行时会触发。而且我没有打开后台模式功能。
发布于 2015-03-24 01:27:00
当你在iOS上挂起一个应用程序时,默认情况下,它会停止运行,除非它使用了background task assertion或具有background mode entitlement。应用程序不运行时无法接收通知。不过,HealthKit有一个功能,当有特定类型的新样本时,可以在后台唤醒你的应用程序。请参阅HKHealthStore的Managing Background Delivery文档。将其与HKObserverQuery结合使用,当有新数据时,即使您的应用程序尚未运行,也会收到通知。
https://stackoverflow.com/questions/29199558
复制相似问题