返回博客首页
← 所有文章

HOW TO: 在你的 NativeScript 应用中启用 HealthKit

2015 年 5 月 19 日 — 作者 Kamen Velikov

HealthKit 是一个框架,允许提供健康和健身服务的 iOS 应用分享数据。用户的健康信息存储在集中式和安全的位置,每个用户决定哪些数据应该对你的应用可用。如果你的 iOS 应用旨在提供此类服务,那么最好的方法是使用 *HealthKit*。

根据这篇博文,有一个 使用 HealthKit 的开源示例 NativeScript 应用 可用。

HKit

启用 HealthKit

注意: 本文假设你已经拥有一个添加了 iOS 平台的 NativeScript 项目。你可以在这里查看如何创建 NativeScript 应用:此处.

首先,你需要在你的项目中开启 HealthKit API。为此,打开位于 <MyProject>/platforms/ios 文件夹中的 .xcodeproj 文件。然后,你可以按照 添加功能 文章中描述的步骤进行操作。

Health Store

一旦你启用了 *HealthKit*,你就可以像在 ObjC 中一样使用它。HealthKit Store 充当连接你到 *HealthKit* 管理的所有数据的桥梁。使用 HealthKit Store 请求权限来分享或读取 *HealthKit* 数据。一旦获得授权,你就可以使用 *HealthKit* Store 将新的样本保存到 Store 中,或者管理你的应用保存的样本。此外,你还可以使用 *HealthKit* Store 启动、停止和管理查询。

创建 Store

你可以使用以下代码创建一个 *HKHealthStore* 实例

 var healthStore = HKHealthStore.new();

请求权限

要访问数据,你需要从用户那里请求权限。以下代码演示了如何执行此操作

// 创建数量类型。
var weightType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass);
 
// 选择要写入的数量类型
var writeDataTypes = NSSet.setWithArray([weightType]);
 
// 选择要读取的数量类型
var readDataTypes = NSSet.setWithArray([weightType]);
 
healthStore.requestAuthorizationToShareTypesReadTypesCompletion(writeDataTypes, readDataTypes, (success, error) {
}

 

读取数据

一旦用户授权你的应用,你就可以自由地访问请求的数据。为此,你可以使用查询。以下示例展示了如何执行查询以获取用户的最新体重:

// 创建排序描述符
var endDateSortDescriptor = NSSortDescriptor.alloc().initWithKeyAscending(HKSampleSortIdentifierEndDate, false);
 
// 创建查询
var query = HKSampleQuery.alloc().initWithSampleTypePredicateLimitSortDescriptorsResultsHandler(weightType, null, 1, [endDateSortDescriptor], (query, results, error) => {
   
}
 
// 执行查询
healthStore.executeQuery(query);

写入数据

将数据写入 *HealthKit* Store 更加容易

// 创建体重
var weight = HKQuantity.quantityWithUnitDoubleValue(HKUnit.poundUnit(), 83);
var now = NSDate.new();
var sample = HKQuantitySample.quantitySampleWithTypeQuantityStartDateEndDate(weightType, weight, now, now);
 
// 保存体重
healthStore.saveObjectWithCompletion(sample,(success, error) => void {
});

结论

这就是如何在 NativeScript 中使用 *HealthKit* API。是的,就这么简单。

要查看完整的代码应用,请访问 NativeScript 框架开源仓库。请在下面的评论中告诉我们你的想法,或者直接关注 @NativeScript on twitter。我们乐于接受想法,创建类似的项目来帮助你探索 {N} 的可能性。