我的一个朋友是从事外出销售工作,老板不但要看他每天的业绩,也会去关注他每天在某个APP的行走步数。你应该知道的,业绩好一切OK。要是业绩不行,步数也少,那就步步惊心了。接下来他问了我里面的原理。我错误的告诉他是每隔多长时间利用定位去拿到经纬度然后计算出来的。太傻太天真。
不废话了,先看看 苹果官方的描述
Use a CMPedometer object to fetch pedestrian-related data. You use a pedometer object to retrieve step counts and other information about the distance traveled and the number of floors ascended or descended. The pedometer object manages a cache of historic data that you can query or you can ask for live updates as the data is processed.
使用CMPedometer 对象来获取行走相关的数据。你能使用pedometer对象去重新获得步数,距离,上下楼层的层数等信息。pedometer对象管理着一个存储历史数据的容器供你查询,而且你也可以实时去更新当容器里面的数据发生了处理变化。
首先你得导入计步的框架
#import <CoreMotion/CoreMotion.h>
#define OneDayTime 606024
_pedonmeter = [[CMPedometer alloc] init];
//判断设备是否能够使用计步功能
if ([CMPedometer isStepCountingAvailable]) {
//查询以前的数据
[_pedonmeter queryPedometerDataFromDate:[NSDate dateWithTimeIntervalSinceNow:-OneDayTime] toDate:[NSDate dateWithTimeIntervalSinceNow:0] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
if (error)
{
NSLog(@"error===%@",error);
}
else {
NSLog(@"步数===%@",pedometerData.numberOfSteps);
NSLog(@"距离===%@",pedometerData.distance);
NSLog(@"上的楼梯层数===%@",pedometerData.floorsAscended);
NSLog(@"下的楼梯层数===%@",pedometerData.floorsDescended);
}
}];
//实时更新
[_pedonmeter startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
NSLog(@"实时更新每米所需要的时间(秒)===%@",pedometerData.currentPace);
NSLog(@"实时更新每秒走的步数===%@",pedometerData.currentCadence);
}];
}else{
NSLog(@"设备暂不支持该功能");
}
PS :CMPedometer最低只支持iOS8。