Пульс с аптечкой Apple
В настоящее время я использую Healthkit в приложении, и у меня нет проблем с получением информации для большинства типов, но у меня проблемы с сердечным ритмом. Каждый раз, когда я пытаюсь прочитать образец, в результате я получаю «0». У меня есть Apple Watch, и мой пульс подается в приложение Apple Health, и я могу видеть его там, так что это не проблема с оборудованием. Мне нужно только отобразить его, не нужно записывать данные обратно. Он запрашивает мое разрешение на первый запуск, чтобы разрешить доступ к частоте сердечных сокращений, поэтому не должно быть никаких проблем с этим кодом, но я все равно опубликую его.
Большинство примеров, которые я могу найти с помощью определения сердечного ритма, относятся либо к Swift, от которого я предпочитаю держаться подальше, либо к устаревшим методам Bluetooth / камеры.
Вот то, что я использую, это в основном копирование и вставка из кода, который извлекает шаги, пройденное расстояние и т. Д. В другом месте моего кода ... так что, вероятно, в этом блоке есть что-то, что не совместимо с данными о частоте сердечных сокращений типа, но я не могу его найти. Сейчас похоже, что он будет получать среднюю частоту сердечных сокращений за день, а не последний образец, что пока хорошо, если я вижу, что НЕКОТОРЫЕ типы данных передаются в приложение. Я не смог найти способ опроса последней выборки частоты сердечных сокращений, что заставило меня поверить, что я использую неправильный метод полностью, но не могу найти какую-либо другую информацию или образцы, которые работают. Я пробовал около 8 различных примеров кода / проектов в Интернете, ни один из которых я не смог бы создать в результате чего-либо, кроме "0" (поэтому, пожалуйста, никаких ссылок на пример кода ... Я уже пробовал все доступные ... google, github и т. д., поэтому любые ссылки, вероятно, получат ответ "Я уже проверял ту же ошибку", смеется). Вот что я сейчас использую:
Блок, в котором я уверен на 99,9%, дает мне проблемы:
- (void)queryHealthDataHeart{
HKQuantityType *typeHeart =[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay
fromDate:now];
NSDate *beginOfDay = [calendar dateFromComponents:components];
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:beginOfDay endDate:now options:HKQueryOptionStrictStartDate];
HKStatisticsQuery *squery = [[HKStatisticsQuery alloc] initWithQuantityType:typeHeart quantitySamplePredicate:predicate options:HKStatisticsOptionNone completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
HKQuantity *quantity = result.averageQuantity;
double beats = [quantity doubleValueForUnit:[HKUnit heartBeatsPerMinuteUnit]];
_lblHeart.text = [NSString stringWithFormat:@"%.f",beats];
}
);
}];
[self.healthStore executeQuery:squery];
}
Код для проверки разрешений:
- (void)readHealthKitData{
HKHealthStore *healthStore = [[HKHealthStore alloc] init];
NSSet *shareObjectTypes = [NSSet setWithObjects:
nil];
NSSet *readObjectTypes = [NSSet setWithObjects:
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate],
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierFlightsClimbed],
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount],
nil];
// Request access
[healthStore requestAuthorizationToShareTypes:shareObjectTypes
readTypes:readObjectTypes
completion:^(BOOL success, NSError *error) {
if(success == YES)
{
[self queryHealthData];
[self queryHealthDataDistance];
[self queryHealthDataFlights];
[self queryHealthDataHeart];
}
else
{
// Determine if it was an error or if the
// user just canceld the authorization request
}
}];}
И выше моего - (void) queryHealthDataHeart у меня есть правильные ссылки, как показано здесь:
#import "AN_Pedometer.h"
#import <HealthKit/HealthKit.h>
@interface AN_Pedometer (){
UILabel *lbCMData;
NSDateFormatter *formatter;}
@property (nonatomic, strong) CMPedometer *pedometer;
@property (nonatomic, strong) HKHealthStore *healthStore;
@end
@interface HKUnit (HKManager)
+ (HKUnit *)heartBeatsPerMinuteUnit;
@end
@implementation HKUnit (HKManager)
+ (HKUnit *)heartBeatsPerMinuteUnit {
return [[HKUnit countUnit] unitDividedByUnit:[HKUnit minuteUnit]];
}
@end