Comment get des données de capteur de Apple Watch à l'iPhone?

Existe-t-il un moyen d'get des données de capteur à partir d'Apple Watch? Par exemple, comment puis-je me connecter et get le rythme cardiaque d'Apple Watch à mon application? Voici les étapes à suivre dans mon application:

  1. Définissez un délégué pour recevoir des informations sur la fréquence cardiaque provenant d'Apple Watch.
  2. Faire une request à Apple Watch pour envoyer datatables périodiquement

Je sais comment cela fonctionne pour d'autres moniteurs de ressources humaines sur BT. Est-ce que l'interface est similaire à ça? Ou devrait dépendre de HealthKit pour y parvenir?

Conformément à WatchKit FAQ sur raywenderlich.com ( faites défiler jusqu'à "Pouvez-vous accéder au capteur de pulsations cardiaques et aux autres capteurs de la montre depuis votre application de surveillance?"), Il semble que vous ne puissiez pas accéder aux données du capteur.

Non. Il n'y a actuellement aucune API pour accéder aux capteurs matériels sur l'Apple Watch pour le moment.

J'ai fait ma propre application d'entraînement (juste pour apprendre comment fonctionne la communication entre iWatch et l'iPhone). Je reçois actuellement les informations de fréquence cardiaque de la manière suivante. Évidemment, cela n'a pas été testé, mais il est logique de voir comment le framework HealthKit est mis en place.

Nous soaps que l'Apple Watch communiquera avec l'iPhone via Bluetooth. Si vous lisez le premier paragraphe de la documentation de HealthKit, vous verrez ceci:

Dans iOS 8.0, le système peut save automatiquement datatables des moniteurs de fréquence cardiaque compatibles Bluetooth LE directement dans le magasin HealthKit.

Puisque nous soaps que l'Apple Watch sera un appareil Bluetooth et qu'il possède un capteur de fréquence cardiaque, je suppose que l'information est stockée dans HealthKit.

J'ai donc écrit le code suivant:

- (void) resortingeveMostRecentHeartRateSample: (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 resortingeveMostRecentHeartRateSample:_healthStore completionHandler:^(HKQuantitySample *sample) { _myCompletionHandler(sample); }]; // If you have subscribed for background updates you must call the completion handler here. // completionHandler(); } }]; [_healthStore executeQuery:observeQuery]; } 

Assurez-vous d'arrêter l'exécution de la requête d'observation une fois l'écran désalloué.