Я сделал свое собственное приложение для тренировки (просто чтобы узнать, как работает связь между 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];
}
Убедитесь, чтобы прекратить выполнение запроса наблюдать только экран освобождаться.
Возможный дубликат [Данные о сердечном ритме на яблочном часе] (http://stackoverflow.com/questions/28858667/heart-rate-data-on-apple-watch) – bmike