2015-04-06 3 views
8

Есть ли способ получить данные датчиков от Apple Watch? Например, как я могу подключиться и получить частоту сердечных сокращений от Apple Watch до моего приложения? Вот те шаги, которые мне нужно сделать в моем приложении:Как получить данные датчиков от Apple Watch до iPhone?

  1. Определите делегата для получения информации о частоте сердечных сокращений от Apple Watch.
  2. Сделать запрос на Apple, Watch, чтобы отправить данные периодически

Я знаю, как это работает для других HR мониторов над BT. Совместим ли интерфейс с этим? Или это должно зависеть от HealthKit для достижения этого?

+0

Возможный дубликат [Данные о сердечном ритме на яблочном часе] (http://stackoverflow.com/questions/28858667/heart-rate-data-on-apple-watch) – bmike

ответ

4

В соответствии с WatchKit FAQ on raywenderlich.com (прокрутите к «Можете ли вы получить доступ к датчику пульса и другим датчикам на часах из вашего приложения часов?») Кажется, что вы не можете получить доступ к данным датчика.

Нет. В настоящее время нет API для доступа к аппаратным датчикам на Apple Watch.

3

Я сделал свое собственное приложение для тренировки (просто чтобы узнать, как работает связь между iWatch и iPhone). В настоящее время я получаю информацию о частоте сердечных сокращений следующим образом. Очевидно, что это не было проверено, но это имеет смысл, как только вы посмотрите, как изложена структура HealthKit.

Мы знаем, что Apple Watch будет общаться с iPhone через Bluetooth. Если прочитать первый абзац документации HealthKit в вы увидите это:

В прошивкой 8.0, система может автоматически сохранять данные из совместимых мониторов Bluetooth LE сердечного ритма непосредственно в HealthKit магазин.

Поскольку мы знаем, что Apple Watch будет устройством Bluetooth и имеет датчик сердечного ритма, я буду считать, что информация хранится в 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]; 
} 

Убедитесь, чтобы прекратить выполнение запроса наблюдать только экран освобождаться.