如何使用HealthKit后台交付?

时间:2014-08-01 21:29:46

标签: ios8 health-kit

在iOS 8 HealthKit中使用后台传递的正确方法是什么?

以下是启用HealthKit后台投放的代码。

    - (void)observeSleepData {
    HKCategoryType *sleepType = [HKCategoryType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis];
    [self.healthStore enableBackgroundDeliveryForType:sleepType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {
        if (success) {

        }
    }];
    HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:sleepType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) {
        NSLog(@"sleep data updated");
    }];
    [self.healthStore executeQuery:query];

除了启用HealthKit功能之外,我还需要配置额外的功能吗? HKObserverQuery是否响应iOS8原生Health应用程序中的手动输入?

2 个答案:

答案 0 :(得分:2)

根据我自己的有限测试,HKObserverQuery的响应仅表示您指定的数据类型发生了变化。它没有告诉您更改或返回新数据的内容。只要您在if (success) {}块中放置了实际查询(可能是锚定查询),上面的代码就可以正常工作。

当我更新本机Health应用程序时,我已经获得了与此类似的代码。

编辑:

我在这里给出了一个更完整的答案:https://stackoverflow.com/a/26385281/1563787

答案 1 :(得分:1)

HealthKit API Reference说:

  

HealthKit数据仅保存在用户设备的本地。为安全起见,HealthKit存储在设备锁定时加密。 HealthKit商店只能由授权的应用程序访问。因此,当您的应用在后台启动时,您可能无法从商店中读取数据;但是,即使手机被锁定,应用仍然可以将数据写入商店。 HealthKit会暂时缓存数据,并在手机解锁后立即将其保存到加密存储中