ios獲取系統(tǒng)健康數(shù)據(jù)

這里我是用CoreMotion的蘋果原生類來做的, 當然有些資料是用HealthKit,但是用HealthKit用戶授權(quán)的時候要跳轉(zhuǎn)到系統(tǒng)界面讓用戶選擇所要授權(quán)的數(shù)據(jù)類型.而用CoreMotion卻可以做到像調(diào)用系統(tǒng)相機那樣彈出一個框點擊是或者否來進行授權(quán).

```

#import "QYPedometerManager.h"

#import <CoreMotion/CoreMotion.h>

@interface QYPedometerManager ()

@property(nonatomic, strong) CMStepCounter *stepCounter;

@property(nonatomic, strong) CMPedometer *pedometer;

@property(nonatomic, strong) NSOperationQueue *operationQueue;

@end

@implementation QYPedometerManager

+ (QYPedometerManager *)shared {

static dispatch_once_t pred;

static QYPedometerManager *sharedInstance = nil;

dispatch_once(&pred, ^{

sharedInstance = [[self alloc] init];

});

return sharedInstance;

}

- (instancetype)init {

self = [super init];

if (self) {

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0

if ([CMPedometer isStepCountingAvailable]) {

self.pedometer = [[CMPedometer alloc] init];

}

#else

if ([CMStepCounter isStepCountingAvailable]) {

self.stepCounter = [[CMStepCounter alloc] init];

self.operationQueue = [[NSOperationQueue alloc] init];

}

#endif

}

return self;

}

/**

*? 查詢某時間段的運動數(shù)據(jù)

*

*? @param start? 開始時間

*? @param end? ? 結(jié)束時間

*? @param handler 查詢結(jié)果

*/

- (void)queryPedometerDataFromDate:(NSDate *)start

toDate:(NSDate *)end

withHandler:(QYPedometerHandler)handler {

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0

[_pedometer

queryPedometerDataFromDate:start

toDate:end

withHandler:^(CMPedometerData *_Nullable pedometerData,

NSError *_Nullable error) {

dispatch_async(dispatch_get_main_queue(), ^{

QYPedometerData *customPedometerData =

[[QYPedometerData alloc] init];

customPedometerData.numberOfSteps =

pedometerData.numberOfSteps;

customPedometerData.distance = pedometerData.distance;

customPedometerData.floorsAscended =

pedometerData.floorsAscended;

customPedometerData.floorsDescended =

pedometerData.floorsDescended;

handler(customPedometerData, error);

});

}];

#else

[_stepCounter queryStepCountStartingFrom:start

to:end

toQueue:_operationQueue

withHandler:^(NSInteger numberOfSteps,

NSError *__nullable error) {

dispatch_async(dispatch_get_main_queue(), ^{

QYPedometerData *pedometerData =

[[QYPedometerData alloc] init];

pedometerData.numberOfSteps =

@(numberOfSteps);

handler(pedometerData, error);

});

}];

#endif

}

/**

*? 監(jiān)聽今天(從零點開始)的行走數(shù)據(jù)

*

*? @param handler 查詢結(jié)果夏伊、變化就更新

*/

- (void)startPedometerUpdatesTodayWithHandler:(QYPedometerHandler)handler;

{

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0

NSDate *toDate = [NSDate date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSDate *fromDate =

[dateFormatter dateFromString:[dateFormatter stringFromDate:toDate]];

[_pedometer

startPedometerUpdatesFromDate:fromDate

withHandler:^(CMPedometerData *_Nullable pedometerData,

NSError *_Nullable error) {

dispatch_async(dispatch_get_main_queue(), ^{

QYPedometerData *customPedometerData =

[[QYPedometerData alloc] init];

customPedometerData.numberOfSteps =

pedometerData.numberOfSteps;

customPedometerData.distance =

pedometerData.distance;

customPedometerData.floorsAscended =

pedometerData.floorsAscended;

customPedometerData.floorsDescended =

pedometerData.floorsDescended;

handler(customPedometerData, error);

});

}];

#else

[_stepCounter startStepCountingUpdatesToQueue:_operationQueue

updateOn:10

withHandler:^(NSInteger numberOfSteps,

NSDate *_Nonnull timestamp,

NSError *_Nullable error) {

QYPedometerData *pedometerData =

[[QYPedometerData alloc] init];

pedometerData.numberOfSteps =

@(numberOfSteps);

handler(pedometerData, error);

}];

#endif

}

/**

*? 停止監(jiān)聽運動數(shù)據(jù)

*/

- (void)stopPedometerUpdates {

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0

[_pedometer stopPedometerUpdates];

#else

[_stepCounter stopStepCountingUpdates];

#endif

}

/**

*? 計步器是否可以使用

*

*? @return YES or NO

*/

+ (BOOL)isStepCountingAvailable {

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0

return [CMPedometer isStepCountingAvailable];

#else

return [CMStepCounter isStepCountingAvailable];

#endif

}

@end

```
頭文件
```

/** *? 計步器管理類 */

#import "QYPedometerData.h"

#import <UIKit/UIKit.h>

typedef void (^QYPedometerHandler)(QYPedometerData *pedometerData,

NSError *error);

@interface QYPedometerManager : NSObject

+ (QYPedometerManager *)shared;

/**

*? 計步器是否可以使用

*

*? @return YES or NO

*/

+ (BOOL)isStepCountingAvailable;

/**

*? 查詢某時間段的行走數(shù)據(jù)

*

*? @param start? 開始時間

*? @param end? ? 結(jié)束時間

*? @param handler 查詢結(jié)果

*/

- (void)queryPedometerDataFromDate:(NSDate *)start

toDate:(NSDate *)end

withHandler:(QYPedometerHandler)handler;

/**

*? 監(jiān)聽今天(從零點開始)的行走數(shù)據(jù)

*

*? @param handler 查詢結(jié)果律胀、變化就更新

*/

- (void)startPedometerUpdatesTodayWithHandler:(QYPedometerHandler)handler;

/**

*? 停止監(jiān)聽運動數(shù)據(jù)

*/

- (void)stopPedometerUpdates;

```

通過創(chuàng)建該類調(diào)用該類方法就能獲取到每天走的步數(shù)和距離了,當然還能獲取到其他數(shù)據(jù)如樓層

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市誓斥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秒赤,老刑警劉巖址晕,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仅仆,居然都是意外死亡器赞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門墓拜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來港柜,“玉大人,你說我怎么就攤上這事咳榜∠淖恚” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵涌韩,是天一觀的道長畔柔。 經(jīng)常有香客問我,道長臣樱,這世上最難降的妖魔是什么靶擦? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮雇毫,結(jié)果婚禮上玄捕,老公的妹妹穿的比我還像新娘。我一直安慰自己棚放,他們只是感情好枚粘,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著飘蚯,像睡著了一般赌结。 火紅的嫁衣襯著肌膚如雪捞蛋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天柬姚,我揣著相機與錄音拟杉,去河邊找鬼。 笑死量承,一個胖子當著我的面吹牛搬设,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撕捍,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拿穴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忧风?” 一聲冷哼從身側(cè)響起默色,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狮腿,沒想到半個月后腿宰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡缘厢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年吃度,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贴硫。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡椿每,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出英遭,到底是詐尸還是另有隱情间护,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布挖诸,位于F島的核電站兑牡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏税灌。R本人自食惡果不足惜均函,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菱涤。 院中可真熱鬧苞也,春花似錦、人聲如沸粘秆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殷勘,卻和暖如春此再,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玲销。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工输拇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贤斜。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓策吠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘩绒。 傳聞我的和親對象是個殘疾皇子猴抹,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容