CMPedometer是iOS 8.0推出的,用来统计用户的的运动数据(步数、楼层、公里数等)。最近项目需要获取用户步数,使用CMPedometer来实现,简单说一下实现步骤:
1.获取隐私权限
在info.plist里面增加Privacy - Motion Usage Description,填写描述文件。
2.使用
声明一个属性,不然他容易泄露,苹果的好多框架都是这样的,不能直接使用,得千万注意
@property(nonatomic,strong)CMPedometer pedometer;
_pedometer = [[CMPedometer alloc]init];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSString *dayStr=[NSString stringWithFormat:@"%@",@"20190513"]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormattersetDateFormat:@"yyyyMMdd"];
// [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题---获取步数不需要转成北京时间,转成北京时间后导致8点前的步数不可获取,原因需要后期更新,正在研究。。。。。。。
NSDate*startDate = [dateFormatterdateFromString:dayStr];
// 结束日期
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
NSLog(@"%@____%@",startDate,endDate);
//判断手机是否支持记步功能,不能作为没有授权的标识
if ([CMPedometer isStepCountingAvailable])
{
[self.pedometer queryPedometerDataFromDate:startDate toDate:endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
NSLog(@"%@____%@",startDate,endDate);
if(error)
{
if(error.code==105)
{
//没有授权获取运动数据
}
else
{
__weaktypeof(self) weakSelf =self;
dispatch_async(dispatch_get_main_queue(), ^{
//主线程里面进行展示步数的UI刷新
});
}
}];
}
else
{
[[[UIAlertView alloc] initWithTitle:@"提示" message:@"该手机暂不支持获取步数!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] show];
}