有没有办法从Apple Watch获取传感器数据?例如,如何从Apple Watch连接并获取心率到我的应用程序?这些是我在我的应用中需要执行的步骤:
我知道它对其他人力资源监视器如何适用于BT。界面是否类似?或者应该依靠HealthKit来实现这一目标?
答案 0 :(得分:4)
根据WatchKit FAQ on raywenderlich.com(滚动到“您可以通过手表应用程序访问手表上的心跳传感器和其他传感器吗?”),看起来好像您无法访问传感器数据。
没有。目前没有API可以访问硬件传感器 Apple Watch此时此刻。
答案 1 :(得分:3)
我已经制作了自己的锻炼应用程序(只是为了了解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];
}
确保在取消分配屏幕后停止执行观察查询。