新聞中心
這篇文章介紹兩種可以獲取計(jì)步數(shù)據(jù)的方法,一種是采用CMPedometer獲取手機(jī)計(jì)步器數(shù)據(jù),另一種是采用HealthKit框架從手機(jī)健康A(chǔ)pp中獲取計(jì)步數(shù)據(jù)。另外玩了一下寫(xiě)入數(shù)據(jù)到健康A(chǔ)pp。有描述不當(dāng)之處,望指點(diǎn)。
成都創(chuàng)新互聯(lián)成立與2013年,先為新寧等服務(wù)建站,新寧等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為新寧企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。花絮(用HealthKit框架構(gòu)建app,寫(xiě)入數(shù)據(jù)到蘋(píng)果健康app中,QQ和Keep等第三方app的運(yùn)動(dòng)數(shù)據(jù)都會(huì)隨之改變,猜測(cè)它們的運(yùn)動(dòng)數(shù)據(jù)是直接從蘋(píng)果健康app中獲取,而且沒(méi)有過(guò)濾掉其它數(shù)據(jù)來(lái)源。而微信運(yùn)動(dòng)的數(shù)據(jù)不會(huì)變,猜測(cè)其來(lái)源可能是使用CMPedometer類獲取的,因?yàn)闇y(cè)試發(fā)現(xiàn)把微信運(yùn)動(dòng)的數(shù)據(jù)來(lái)源(蘋(píng)果健康)關(guān)閉后,依然會(huì)有運(yùn)動(dòng)數(shù)據(jù),而且該運(yùn)動(dòng)數(shù)據(jù)和CMPedometer類獲取的一致。)
使用CMPedometer類來(lái)獲取步數(shù)和距離
使用時(shí)需要導(dǎo)入
CMPedometer
+ (BOOL)isStepCountingAvailable; 設(shè)備是否支持計(jì)步功能
+ (BOOL)isDistanceAvailable; 除了計(jì)步,設(shè)備是否支持距離估計(jì)
+ (BOOL)isFloorCountingAvailable; 除了計(jì)步,設(shè)備是否支持臺(tái)階計(jì)數(shù)
+ (BOOL)isPaceAvailable NS_AVAILABLE(NA,9_0);除了計(jì)步,設(shè)備是否支持速度估計(jì)
+(BOOL)isCadenceAvailable NS_AVAILABLE(NA,9_0);除了計(jì)步,設(shè)備是否支持節(jié)奏估計(jì)
+ (BOOL)isPedometerEventTrackingAvailable NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);設(shè)備是否支持計(jì)步器事件
- (void)queryPedometerDataFromDate:(NSDate *)start toDate:(NSDate *)end withHandler:(CMPedometerHandler)handler;在給定時(shí)間范圍內(nèi)查詢用戶的行走活動(dòng),數(shù)據(jù)最多可以使用7天內(nèi)有效,返回的數(shù)據(jù)是從系統(tǒng)范圍的歷史記錄中計(jì)算出來(lái)的,該歷史記錄是在后臺(tái)連續(xù)收集的。結(jié)果返回在串行隊(duì)列中。
- (void)startPedometerUpdatesFromDate:(NSDate *)start withHandler:(CMPedometerHandler)handler;在串行隊(duì)列上啟動(dòng)一系列連續(xù)計(jì)步器更新到處理程序。 對(duì)于每次更新,應(yīng)用程序?qū)闹付ǖ拈_(kāi)始日期和與最新確定相關(guān)聯(lián)的時(shí)間戳開(kāi)始收到累積的行人活動(dòng)。 如果應(yīng)用程序在后臺(tái)進(jìn)行背景調(diào)整,則應(yīng)用程序?qū)⒃谙麓胃轮惺盏皆诤笈_(tái)期間累積的所有行人活動(dòng)。
-(void)stopPedometerUpdates;停止計(jì)步器更新
-(void)startPedometerEventUpdatesWithHandler:(CMPedometerEventHandler)handler NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);在串行隊(duì)列上啟動(dòng)計(jì)步器事件更新。 事件僅在應(yīng)用程序在前臺(tái)/后臺(tái)運(yùn)行時(shí)可用。
-(void)stopPedometerEventUpdates NS_AVAILABLE(NA,10_0) __WATCHOS_AVAILABLE(3_0);停止計(jì)步器事件更新
CMPedometerData
@property(readonly, nonatomic) NSDate *startDate;計(jì)步器數(shù)據(jù)有效期間的開(kāi)始時(shí)間。這是會(huì)話或歷史查詢請(qǐng)求的開(kāi)始時(shí)間。
@property(readonly, nonatomic) NSDate *endDate;計(jì)步器數(shù)據(jù)有效期間的結(jié)束時(shí)間。對(duì)于更新,這是最新更新的時(shí)間。 對(duì)于歷史查詢,這是請(qǐng)求的結(jié)束時(shí)間。
@property(readonly, nonatomic) NSNumber *numberOfSteps;用戶的步數(shù)
@property(readonly, nonatomic, nullable) NSNumber *distance; 用戶行走和跑步時(shí)估計(jì)的一米為單位的距離。若設(shè)備不支持則值為nil
@property(readonly, nonatomic, nullable) NSNumber *floorsAscended;上樓的大概樓層數(shù),若設(shè)備不支持則值為nil
@property(readonly, nonatomic, nullable) NSNumber *floorsDescended;下樓的大概樓層數(shù), 若設(shè)備不支持則值為nil
@property(readonly, nonatomic, nullable) NSNumber *currentPace NS_AVAILABLE(NA,9_0);對(duì)于更新,這將以s / m(每米秒)返回當(dāng)前速度。 如果滿足以下條件,則值為零:1. 資料尚未公布 2. 歷史查詢 3.平臺(tái)不支持
@property(readonly, nonatomic, nullable) NSNumber *currentCadence NS_AVAILABLE(NA,9_0);對(duì)于更新,這將返回以秒為單位執(zhí)行行走的節(jié)奏。 如果滿足以下條件,則值為零:1. 資料尚未公布 2. 歷史查詢 3.平臺(tái)不支持
@property(readonly, nonatomic, nullable) NSNumber *averageActivePace NS_AVAILABLE(NA,10_0);對(duì)于更新,這將返回自startPedometerUpdatesFromDate:withHandler :,以s / m(每米秒))的平均活動(dòng)速度。 對(duì)于歷史查詢,這將返回startDate和endDate之間的平均活動(dòng)速度。 平均主動(dòng)速度省略了非活動(dòng)時(shí)間,平均步調(diào)從用戶移動(dòng)。 如果滿足以下條件,則值為零:1. 對(duì)于歷史信息查詢,信息無(wú)效。例如用戶在開(kāi)始時(shí)間和結(jié)束時(shí)間內(nèi)沒(méi)有移動(dòng) 2. 平臺(tái)不支持
CMPedometerEvent
@property(readonly, nonatomic) NSDate *date;事件發(fā)生的時(shí)間
@property(readonly, nonatomic) CMPedometerEventType type;描述行走活動(dòng)過(guò)渡的事件類型
typedef void (^CMPedometerHandler)(CMPedometerData * __nullable pedometerData, NSError * __nullable error) __TVOS_PROHIBITED;當(dāng)計(jì)步器數(shù)據(jù)可用時(shí)要調(diào)用的block的類型
typedef void (^CMPedometerEventHandler)(CMPedometerEvent * __nullable pedometerEvent, NSError * __nullable error) NS_AVAILABLE(NA, 10_0) __WATCHOS_AVAILABLE(3_0) __TVOS_PROHIBITED;//當(dāng)計(jì)步器事件可用時(shí)將被調(diào)用的block的類型。
獲取步數(shù)和距離的方法
1、使用
2、可以使用isStepCountingAvailable或者isDistanceAvailable來(lái)檢查設(shè)備是否支持計(jì)步功能或距離功能。
3、創(chuàng)建CMPedometer實(shí)例對(duì)象
/// 創(chuàng)建計(jì)步器對(duì)象 if ([CMPedometer isStepCountingAvailable]) { // 8.0 之后可使用 self.pedometer = [[CMPedometer alloc] init]; }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)題目:詳解iOS計(jì)步器的幾種實(shí)現(xiàn)方式-創(chuàng)新互聯(lián)
文章地址:http://www.ef60e0e.cn/article/cdipps.html