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];
}