Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 苹果公司的心率';s健康套件_Ios_Healthkit_Hkhealthstore - Fatal编程技术网

Ios 苹果公司的心率';s健康套件

Ios 苹果公司的心率';s健康套件,ios,healthkit,hkhealthstore,Ios,Healthkit,Hkhealthstore,我目前正在一个应用程序中使用Healthkit,获取大多数类型的信息没有问题,但心率有问题。每次我尝试读取样本时,结果都是“0”。我有一个苹果手表,我的心率被输入到苹果健康应用程序中,可以在那里直观地看到,所以这不是硬件问题。我只需要显示它,不需要写回数据。它在第一次运行时请求我允许访问心率,因此该代码不应该有任何问题,但无论如何我会发布它 我能找到的心率检测的大多数例子要么是Swift(我更喜欢远离它),要么是超过了蓝牙/摄像头方法 这里是我正在使用的,它主要是从代码中复制和粘贴的,用于检索我

我目前正在一个应用程序中使用Healthkit,获取大多数类型的信息没有问题,但心率有问题。每次我尝试读取样本时,结果都是“0”。我有一个苹果手表,我的心率被输入到苹果健康应用程序中,可以在那里直观地看到,所以这不是硬件问题。我只需要显示它,不需要写回数据。它在第一次运行时请求我允许访问心率,因此该代码不应该有任何问题,但无论如何我会发布它

我能找到的心率检测的大多数例子要么是Swift(我更喜欢远离它),要么是超过了蓝牙/摄像头方法

这里是我正在使用的,它主要是从代码中复制和粘贴的,用于检索我代码中其他地方的步骤、步行距离等。。。所以我可能在这个块中找到了与心率数据类型不兼容的东西,但我找不到它。现在,它看起来将获得当天的平均心率,而不是最新的样本,只要我能看到某些类型的数据被输入到应用程序中,现在就可以了。我找不到一种方法来调查最新的心率样本,这让我相信我使用了完全错误的方法,但找不到任何其他有用的信息或样本。我已经尝试了8个不同的在线示例代码/项目,结果除了“0”之外,没有一个我可以生成任何东西(因此请不要链接到示例代码…我已经尝试了所有可用的示例代码…google、github等,所以任何链接都可能会得到“我已经测试了同一个错误”的响应,lol)。下面是我现在正在使用的:

我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
                                       }

                                   }];}
在我的-(无效)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
#导入“AN_Pedometer.h”
#进口
@接口与计步器(){
UILabel*lbCMData;
NSDateFormatter*格式化程序;}
@性能(非原子,强)CM计步器*计步器;
@不动产(非原子、强)香港健康商店*健康商店;
@结束
@联络小组(经理)
+(HKUnit*)心脏跳动单位;
@结束
@执行小组(香港经理)
+(HKUnit*)心脏跳动单位{
返回[[HKUnit countUnit]unitDividedByUnit:[HKUnit minuteUnit]];
}
@结束

根据我读到的内容,如果我是正确的,您正在尝试读取从一天开始到现在的心率

使用日期格式化程序后,通过注销来检查开始日期和结束日期。开始时间和结束时间可能相同,这就是为什么结果为0

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSString *dateString = [dateFormatter stringFromDate:beginOfDay];
NSLog(@"%@", dateString);
您还应该将小时、分钟和秒设置为零,以确保获得一天开始的时间

NSDateComponents *components = [calendar components:NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay
                                           fromDate:now];
components.hour = 0;
components.minute = 0;
components.second = 0;

希望这对您有所帮助。

如果您想获得平均数量,请在HKStatisticsQuery选项中查询。否则它将始终为零(即未计算): 选项参数应设置为HKStatisticsOptionDiscreteAverage,而不是 香港统计选择无