1

在 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 原生健康应用程序中的手动输入?

4

2 回答 2

2

根据我自己的有限测试,来自 HKObserverQuery 的响应仅意味着您指定的数据类型发生了变化。它不会告诉您发生了什么变化或返回新数据。只要您将实际查询(可能是锚定查询)放入if (success) {}块中,您上面的代码就应该可以工作。

当我更新本机 Health 应用程序时,我得到了类似的代码来运行。

编辑:

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

于 2014-08-04T19:49:26.773 回答
2

HealthKit API 参考说:

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

于 2016-11-01T08:06:22.047 回答