iOS_计步_获取运动与健康

iOS获取本机的运动数据,一般是通过HealthKit或者运动与健康。

获取HealthKit内的数据,需要修改证书,同时HealthKit内的数据源也来自于运动与健康。

下面简单介绍运动与健康的调用代码
记得添加隐私权限

<key>NSMotionUsageDescription</key>
	<string>隐私权限</string>

1、.h文件

#import <Foundation/Foundation.h>
#import <CoreMotion/CoreMotion.h>

NS_ASSUME_NONNULL_BEGIN

@interface CMPedometerManager : NSObject
+ (id)shareCMPedometerManager;
// error.code 105 隐私权限被拒绝
// info.plist 添加隐私权限 Privacy - Motion Usage Description

/**
 *  从某一时间段开始,连续的采集数据
 *  当设备中的活动数据发生变更就会回调此方法
 *  此方法是在串行队列中执行
 */
- (void)queryStepsFormStartDate:(NSDate *)startDate
                    withHandler:(CMPedometerHandler)handler;
/**
 *  查询从当前时间开始的数据,连续的采集数据
 *  此方法是在串行队列中执行
 */
- (void)queryStepsFormNowDateWithHandler:(CMPedometerHandler)handler;

/**
 *  查询某一时间段的数据,时间可长达7天,
 *  此方法是在串行队列中执行
 */
- (void)queryStepsFormStartDate:(NSDate *)startDate
                         toDate:(NSDate *)endDate
                    withHandler:(CMPedometerHandler)handler;
/**
 *  查询今天的数据
 *  此方法是在串行队列中执行
*/
- (void)querySameDayStepsWithHandle:(CMPedometerHandler)handler;

2、.m文件

#import "CMPedometerManager.h"

@interface CMPedometerManager ()
@property (nonatomic, strong) CMPedometer *pedometer;

@end

@implementation CMPedometerManager
static id manager;
static CMPedometer *pedometer;

+ (id)shareCMPedometerManager{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[[self class] alloc] init];
        pedometer = [[CMPedometer alloc]init];
    });
    return manager;
}

- (void)queryStepsFormStartDate:(NSDate *)startDate withHandler:(CMPedometerHandler)handler{
    if ([CMPedometer isStepCountingAvailable]) {
        [pedometer stopPedometerUpdates];
        [pedometer startPedometerUpdatesFromDate:startDate withHandler:handler];
    }else{
        NSLog(@"记步功能不可用");
    }
}
- (void)queryStepsFormNowDateWithHandler:(CMPedometerHandler)handler{
    [self queryStepsFormStartDate:[NSDate date] withHandler:handler];
}

- (void)queryStepsFormStartDate:(NSDate *)startDate
                         toDate:(NSDate *)endDate
                    withHandler:(CMPedometerHandler)handler{
    if ([CMPedometer isStepCountingAvailable]) {
        [pedometer queryPedometerDataFromDate:startDate toDate:endDate withHandler:handler];
    }else{
        NSLog(@"记步功能不可用");
    }
}
- (void)querySameDayStepsWithHandle:(CMPedometerHandler)handler{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *now = [NSDate date];
    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
    NSDate *startDate = [calendar dateFromComponents:components];
    NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
    [self queryStepsFormStartDate:startDate toDate:endDate withHandler:handler];
    
}

猜你喜欢

转载自blog.csdn.net/FlyingKuiKui/article/details/105074681