如何从 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 通知转移到 Apple Watch App?

使用 HKHeartbeatSeriesSample 从 Apple Watch 获取实时心跳数据

如何在 Objective-C 中的 OS2 中将数据从 Iphone 发送到 Apple Watch