iOS--使用HealthKit獲取步數(shù)

當然我們可以使用陀螺儀通過算法去計算步數(shù),但是蘋果既然可以獲取健康里面的步數(shù)胎挎,就不需要我們自己去計算了,何樂而不為呢扰楼?(我承認我懶????)

一. 使用框架

D7188EFC-3B9B-4B62-8991-0755360DE434.png

打開按鈕之后呀癣,左側會自動導入框架

EDBF7066-0F59-485A-82FB-92D206156AB3.png

在需要使用的頁面導入框架#import <HealthKit/HealthKit.h>

二. 代碼部分

首先聲明一個HKHealthStore類的實例,去獲取在健康里面獲取數(shù)據(jù)的權限弦赖,在iPad上面是不支持此框架的,所以我們要進行一個判斷:

if (![HKHealthStore isHealthDataAvailable]) {
        NSLog(@"該設備不支持HealthKit");
    }

如果不是iPad正式開始獲取權限:

 //創(chuàng)建healthStore對象
    self.healthStore = [[HKHealthStore alloc]init];
    
    //設置需要獲取的權限 這里僅設置了步數(shù)
    HKObjectType *stepType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
    NSSet *healthSet = [NSSet setWithObjects:stepType, nil];
    
    //從健康應用中獲取權限
    [self.healthStore requestAuthorizationToShareTypes:nil readTypes:healthSet completion:^(BOOL success, NSError * _Nullable error) {
        if (success) {
            //獲取步數(shù)后我們調用獲取步數(shù)的方法
            [self readStepCount];
        }
        else
        {
            NSLog(@"獲取步數(shù)權限失敗");
        }
    }];

接下來需要實現(xiàn)獲取步數(shù)的方法代碼:

(1)查詢采樣信息
HKSampleType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
(2)NSSortDescriptor來告訴healthStore怎么樣將結果排序
 NSSortDescriptor *start = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:NO];
    NSSortDescriptor *end = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierEndDate ascending:NO];
(3)由于健康中的數(shù)據(jù)也是通過時間來獲取的浦辨,所以這里我們要獲取當前時間進行對比
 NSDate *now = [NSDate date];
    NSCalendar *calender = [NSCalendar currentCalendar];
    NSUInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    NSDateComponents *dateComponent = [calender components:unitFlags fromDate:now];
    int hour = (int)[dateComponent hour];
    int minute = (int)[dateComponent minute];
    int second = (int)[dateComponent second];
    NSDate *nowDay = [NSDate dateWithTimeIntervalSinceNow:  - (hour*3600 + minute * 60 + second) ];
    //時間結果與想象中不同是因為它顯示的是0區(qū)
    NSLog(@"今天%@",nowDay);
    NSDate *nextDay = [NSDate dateWithTimeIntervalSinceNow:  - (hour*3600 + minute * 60 + second)  + 86400];
    NSLog(@"明天%@",nextDay);
    NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:nowDay endDate:nextDay options:(HKQueryOptionNone)];
(4)查詢的基類是HKQuery蹬竖,這是一個抽象類,能夠實現(xiàn)每一種查詢目標流酬,這里我們需要查詢的步數(shù)是一個HKSample類所以對應的查詢類是HKSampleQuery币厕。下面的limit參數(shù)傳1表示查詢最近一條數(shù)據(jù),查詢多條數(shù)據(jù)只要設置limit的參數(shù)值就可以了
HKSampleQuery *sampleQuery = [[HKSampleQuery alloc]initWithSampleType:sampleType predicate:predicate limit:0 sortDescriptors:@[start,end] resultsHandler:^(HKSampleQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSError * _Nullable error) {
        //設置一個int型變量來作為步數(shù)統(tǒng)計
        int allStepCount = 0;
        for (int i = 0; i < results.count; i ++) {
            //把結果轉換為字符串類型
            HKQuantitySample *result = results[i];
            HKQuantity *quantity = result.quantity;
            NSMutableString *stepCount = (NSMutableString *)quantity;
            NSString *stepStr =[ NSString stringWithFormat:@"%@",stepCount];
            //獲取51 count此類字符串前面的數(shù)字
            NSString *str = [stepStr componentsSeparatedByString:@" "][0];
            int stepNum = [str intValue];
            NSLog(@"%d",stepNum);
            //把一天中所有時間段中的步數(shù)加到一起
            allStepCount = allStepCount + stepNum;
        }
        NSLog(@"今天的總步數(shù)====%d",allStepCount);
    }];
(5)開始執(zhí)行查詢
[self.healthStore executeQuery:sampleQuery];

這樣就實現(xiàn)了獲取今天到現(xiàn)在為止的步數(shù)??????

評論的問題demo下載地址下載

不愛下載 芽腾,我在給你發(fā)旦装。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市摊滔,隨后出現(xiàn)的幾起案子阴绢,更是在濱河造成了極大的恐慌店乐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呻袭,死亡現(xiàn)場離奇詭異眨八,居然都是意外死亡,警方通過查閱死者的電腦和手機左电,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門廉侧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人篓足,你說我怎么就攤上這事段誊。” “怎么了栈拖?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵连舍,是天一觀的道長。 經常有香客問我辱魁,道長烟瞧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任染簇,我火速辦了婚禮参滴,結果婚禮上,老公的妹妹穿的比我還像新娘锻弓。我一直安慰自己砾赔,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布青灼。 她就那樣靜靜地躺著暴心,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杂拨。 梳的紋絲不亂的頭發(fā)上专普,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音弹沽,去河邊找鬼檀夹。 笑死,一個胖子當著我的面吹牛策橘,可吹牛的內容都是我干的炸渡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼丽已,長吁一口氣:“原來是場噩夢啊……” “哼蚌堵!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吼畏,失蹤者是張志新(化名)和其女友劉穎督赤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宫仗,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡够挂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了藕夫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孽糖。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖毅贮,靈堂內的尸體忽然破棺而出办悟,到底是詐尸還是另有隱情,我是刑警寧澤滩褥,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布病蛉,位于F島的核電站,受9級特大地震影響瑰煎,放射性物質發(fā)生泄漏铺然。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一酒甸、第九天 我趴在偏房一處隱蔽的房頂上張望魄健。 院中可真熱鬧,春花似錦插勤、人聲如沸沽瘦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽析恋。三九已至,卻和暖如春盛卡,著一層夾襖步出監(jiān)牢的瞬間助隧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工滑沧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喇颁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓嚎货,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔫浆。 傳聞我的和親對象是個殘疾皇子殖属,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容