在微信運(yùn)動、QQ健康等泛濫的年代,我們公司也終于要搞一個計(jì)步器,特此記錄。
對于使用了M7或者M(jìn)8處理器的設(shè)備(iPhone5s、iPhone6、iPhone6 Plus、iPhone6s、iPhone6s Plus、),Core Motion框架支持了一些預(yù)置的motion動作,比如步數(shù)、爬樓還有移動類型(行走、騎行等等)。
所以計(jì)步器的開發(fā)其實(shí)很簡單,我們只需要用Core Motion框架就可以直接從設(shè)備讀取監(jiān)測了。當(dāng)然我們還可以用HealthKit進(jìn)行開發(fā),在這里我們不進(jìn)行詳細(xì)的介紹。
Core Motion中的CMStepCounter和CMPedometer是我們今天的重點(diǎn)。
CMPedometer
在iOS8及其以上系統(tǒng)中我們可以使用CMPedometer類獲取行走相關(guān)信息(步數(shù)、距離、上樓、下樓、當(dāng)前速度等)。
當(dāng)前設(shè)備是否可以獲取步數(shù)
+ (BOOL)isStepCountingAvailable;
當(dāng)前設(shè)備是否可以獲取距離
+ (BOOL)isDistanceAvailable;
當(dāng)前設(shè)備是否可以獲取上下樓層數(shù)
+ (BOOL)isFloorCountingAvailable;
當(dāng)前設(shè)備是否可以獲取速度(s/m)
+ (BOOL)isPaceAvailable
當(dāng)前設(shè)備是否可以獲取節(jié)奏
+ (BOOL)isCadenceAvailable
根據(jù)開始和結(jié)束時間查詢行走相關(guān)信息
- (void)queryPedometerDataFromDate:(NSDate *)start
toDate:(NSDate *)end
withHandler:(CMPedometerHandler)handler;
從某一時刻開始監(jiān)測步數(shù)變化
- (void)startPedometerUpdatesFromDate:(NSDate *)start
withHandler:(CMPedometerHandler)handler;
停止監(jiān)測步數(shù)變化
- (void)stopPedometerUpdates;
CMStepCounter
在iOS7中我們只能使用CMStepCounter類獲取步數(shù),并且僅能夠獲取步數(shù)。
判斷步數(shù)統(tǒng)計(jì)是否有效
+ (BOOL)isStepCountingAvailable;
根據(jù)開始和結(jié)束時間查詢步數(shù)
- (void)queryStepCountStartingFrom:(NSDate *)start
to:(NSDate *)end
toQueue:(NSOperationQueue *)queue
withHandler:(CMStepQueryHandler)handler;
開始斷監(jiān)測步數(shù)變化
- (void)startStepCountingUpdatesToQueue:(NSOperationQueue *)queue
updateOn:(NSInteger)stepCounts
withHandler:(CMStepUpdateHandler)handler;
停止監(jiān)測步數(shù)變化
- (void)stopStepCountingUpdates;
總結(jié)
綜上我們可以看出CMPedometer類可以獲取的運(yùn)動信息更加詳細(xì)。而CMStepCounter類僅能夠獲取步數(shù)。我們在使用中需要判斷系統(tǒng)版本使用不同的類獲取行走信息。
我對CMPedometer 和CMStepCounter做了簡單封裝,使得你只需要一行代碼就可以獲取及監(jiān)測行走信息。 代碼奉上