如何从 Apple Watch 获取传感器数据到 iPhone?
Posted
技术标签:
【中文标题】如何从 Apple Watch 获取传感器数据到 iPhone?【英文标题】:How to get sensor data from Apple Watch to iPhone? 【发布时间】:2015-04-06 02:21:56 【问题描述】:有没有办法从 Apple Watch 获取传感器数据?例如,如何将 Apple Watch 连接到我的应用程序并获取心率?这些是我需要在我的应用程序中执行的步骤:
-
定义一个代表以从 Apple Watch 接收心率信息。
向 Apple Watch 发出定期发送数据的请求
我知道它如何通过 BT 用于其他 HR 监视器。界面和那个一样吗?还是应该依靠 HealthKit 来实现?
【问题讨论】:
Heart Rate data on apple Watch的可能重复 【参考方案1】:根据WatchKit FAQ on raywenderlich.com(滚动到“您可以通过手表应用访问手表上的心跳传感器和其他传感器吗?”),您似乎无法访问传感器数据。
没有。目前没有 API 可以访问硬件传感器 目前是 Apple Watch。
【讨论】:
【参考方案2】:我制作了自己的锻炼应用程序(只是为了了解 iWatch 和 iPhone 之间的通信是如何工作的)。我目前正在通过以下方式获取心率信息。显然,这还没有经过测试,但是一旦您查看了 HealthKit 框架的布局,它就会变得有意义。
我们知道 Apple Watch 将通过蓝牙与 iPhone 通信。如果您阅读 HealthKit 文档的第一段,您会看到:
在 ios 8.0 中,系统可以自动保存兼容的数据 蓝牙 LE 心率监测器直接进入 HealthKit 商店。
由于我们知道 Apple Watch 将是蓝牙设备并具有心率传感器,因此我假设信息存储在 HealthKit 中。
于是我写了如下代码:
- (void) retrieveMostRecentHeartRateSample: (HKHealthStore*) _healthStore completionHandler:(void (^)(HKQuantitySample*))completionHandler
HKSampleType *_sampleType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
NSPredicate *_predicate = [HKQuery predicateForSamplesWithStartDate:[NSDate distantPast] endDate:[NSDate new] options:HKQueryOptionNone];
NSSortDescriptor *_sortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierStartDate ascending:NO];
HKSampleQuery *_query = [[HKSampleQuery alloc] initWithSampleType:_sampleType predicate:_predicate limit:1 sortDescriptors:@[_sortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error)
if (error)
NSLog(@"%@ An error has occured with the following description: %@", self, error.localizedDescription);
else
HKQuantitySample *mostRecentSample = [results objectAtIndex:0];
completionHandler(mostRecentSample);
];
[_healthStore executeQuery:_query];
static HKObserverQuery *observeQuery;
- (void) startObservingForHeartRateSamples: (HKHealthStore*) _healthStore completionHandler:(void (^)(HKQuantitySample*))_myCompletionHandler
HKSampleType *_sampleType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
if (observeQuery != nil)
[_healthStore stopQuery:observeQuery];
observeQuery = [[HKObserverQuery alloc] initWithSampleType:_sampleType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error)
if (error)
NSLog(@"%@ An error has occured with the following description: %@", self, error.localizedDescription);
else
[self retrieveMostRecentHeartRateSample:_healthStore completionHandler:^(HKQuantitySample *sample)
_myCompletionHandler(sample);
];
// If you have subscribed for background updates you must call the completion handler here.
// completionHandler();
];
[_healthStore executeQuery:observeQuery];
确保在屏幕被释放后停止执行观察查询。
【讨论】:
以上是关于如何从 Apple Watch 获取传感器数据到 iPhone?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以创建一个应用程序来读取 Apple Watch 的心率传感器?
Apple Watch:这是让 Apple Watch 应用获取新数据的好方法吗?
如何将用户从 Apple Watch 通知转移到 Apple Watch App?