我的一個(gè)朋友是從事外出銷售工作,老板不但要看他每天的業(yè)績,也會去關(guān)注他每天在某個(gè)APP的行走步數(shù)。你應(yīng)該知道的,業(yè)績好一切OK。要是業(yè)績不行,步數(shù)也少,那就步步驚心了。接下來他問了我里面的原理。我錯(cuò)誤的告訴他是每隔多長時(shí)間利用定位去拿到經(jīng)緯度然后計(jì)算出來的。太傻太天真。
不廢話了,先看看 蘋果官方的描述
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 對象來獲取行走相關(guān)的數(shù)據(jù)。你能使用pedometer對象去重新獲得步數(shù),距離,上下樓層的層數(shù)等信息。pedometer對象管理著一個(gè)存儲歷史數(shù)據(jù)的容器供你查詢,而且你也可以實(shí)時(shí)去更新當(dāng)容器里面的數(shù)據(jù)發(fā)生了處理變化。
首先你得導(dǎo)入計(jì)步的框架
#import <CoreMotion/CoreMotion.h>
#define OneDayTime 606024
_pedonmeter = [[CMPedometer alloc] init];
//判斷設(shè)備是否能夠使用計(jì)步功能
if ([CMPedometer isStepCountingAvailable]) {
//查詢以前的數(shù)據(jù)
[_pedonmeter queryPedometerDataFromDate:[NSDate dateWithTimeIntervalSinceNow:-OneDayTime] toDate:[NSDate dateWithTimeIntervalSinceNow:0] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
if (error)
{
NSLog(@"error===%@",error);
}
else {
NSLog(@"步數(shù)===%@",pedometerData.numberOfSteps);
NSLog(@"距離===%@",pedometerData.distance);
NSLog(@"上的樓梯層數(shù)===%@",pedometerData.floorsAscended);
NSLog(@"下的樓梯層數(shù)===%@",pedometerData.floorsDescended);
}
}];
//實(shí)時(shí)更新
[_pedonmeter startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
NSLog(@"實(shí)時(shí)更新每米所需要的時(shí)間(秒)===%@",pedometerData.currentPace);
NSLog(@"實(shí)時(shí)更新每秒走的步數(shù)===%@",pedometerData.currentCadence);
}];
}else{
NSLog(@"設(shè)備暫不支持該功能");
}
PS :CMPedometer最低只支持iOS8。