如何使用 HealthKit 后台交付?
Posted
技术标签:
【中文标题】如何使用 HealthKit 后台交付?【英文标题】:How to use HealthKit background delivery? 【发布时间】:2014-08-01 21:29:46 【问题描述】:在 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 应用中的手动输入?
【问题讨论】:
看看我的回答:***.com/a/35073904/1677480 【参考方案1】:根据我自己的有限测试,来自 HKObserverQuery 的响应仅意味着您指定的数据类型发生了变化。它不会告诉您发生了什么变化或返回新数据。只要您在 if (success)
块中放置一个实际查询(可能是一个锚定查询),您上面的代码应该可以工作。
当我更新本机健康应用程序时,我得到了类似的代码来运行。
编辑:
我在这里给出了更完整的答案:https://***.com/a/26385281/1563787
【讨论】:
这是正确的。收到更改通知后,您必须查询您感兴趣的数据。最后,您必须在回调中调用 IOS 给您的完成函数,以通知它您已完成处理数据。 【参考方案2】:HealthKit API Reference 说:
HealthKit 数据仅本地保存在用户设备上。为安全起见,HealthKit 存储在设备锁定时被加密。 HealthKit 商店只能由授权的应用程序访问。因此,当您的应用在后台启动时,您可能无法从商店中读取数据;但是,即使手机被锁定,应用程序仍然可以将数据写入商店。 HealthKit 会临时缓存数据并在手机解锁后立即将其保存到加密存储中
【讨论】:
这是直接引用吗?如果是这样,您可以通过在引用的行前加上>
来表示它 - 请参阅 editing help。如果不是,您可能希望更清楚地说明您的释义。
是的。官方文档。您可以在应用程序开发人员中找到它。链接:developer.apple.com/reference/healthkit
我已编辑您的答案以表明这是直接引用。将来,您应该可以自己执行此操作 - 请参阅 Help: Editing。以上是关于如何使用 HealthKit 后台交付?的主要内容,如果未能解决你的问题,请参考以下文章