iOS HealthKit 健康應(yīng)用

iOS HealthKit筆記

iOS HealthKit框架使用

  1. 如何使項(xiàng)目能夠使用HealthKit
  2. 獲取讀取和寫入healthKit數(shù)據(jù)的權(quán)限
  3. 讀取healthKit的數(shù)據(jù)
  4. 寫入HealthKit數(shù)據(jù)
  5. 對(duì)HealthKit數(shù)據(jù)進(jìn)行格式化.

HealthKit 是什么東西.

  • HealthKit框架提供了一個(gè)結(jié)構(gòu),應(yīng)用可以使用它來分享健康和健身數(shù)據(jù)
  • 簡(jiǎn)單的說. HealthKit框架用來與蘋果的健康應(yīng)用做數(shù)據(jù)交互. 例如可以從HealthKit中讀取用戶的記步數(shù)據(jù). 向蘋果的健康應(yīng)用中寫入用戶的血糖, 血壓, 心跳等數(shù)據(jù).

如何使項(xiàng)目能夠使用HealthKit

首先你的開發(fā)者賬號(hào)的Bundle identifier需要能夠使用healthKit.

markdownimage-0.jpg

在Target中設(shè)置healthKit開啟

markdownimage-1.jpg

獲取讀取和寫入HealthKit數(shù)據(jù)的權(quán)限

這句判斷healthStore是否可用,只有iOS8以上的版本才有healthKit

[HKHealthStore isHealthDataAvailable];

獲取權(quán)限.兩個(gè)參數(shù)分別是寫權(quán)限和讀權(quán)限,類型為NSSet
可以一次獲取許多種權(quán)限例如身高體重血壓血糖,執(zhí)行這句后自動(dòng)彈出頁面,用戶自主選擇授權(quán).

[self.healthStore requestAuthorizationToShareTypes:  readTypes:  completion:^(BOOL success, NSError *error)]{
}];

HKQuantityType(查詢的數(shù)據(jù)類型)的創(chuàng)建

HKQuantityTyoeIdentifierBloodGlucose表示血糖,在HealthKit/HKTypeIdentifiers.h文件中存儲(chǔ)了全部的healthKit數(shù)據(jù)類型的定義,使用這些identifier來構(gòu)造HKQuantityType

HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodGlucose];

讀取HealthKit數(shù)據(jù)

讀取使用HKSampleQuery對(duì)象進(jìn)行查詢,

參數(shù)介紹:
SampleType:使用HKQuantityType進(jìn)行封裝,表示查詢的數(shù)據(jù)的類型, predicate:表示過濾方式,可以傳nil, limit:查詢返回的數(shù)據(jù)數(shù)量,可以為1, sortDescriptors:排序方式
NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO];

返回?cái)?shù)據(jù)results,result為HKQuantitySample類型

數(shù)據(jù)包含數(shù)值和單位,數(shù)據(jù)單位的類型是HKUnit類型,這個(gè)類包含許多的類型,如長度,質(zhì)量,體積,壓力等等,但是像血糖這種毫克/分升或者毫摩>>爾/升,這種單位沒有直接提供,但是有個(gè)方法能夠通過HKQuantityType獲取它的HKUnit

HKSampleQuery *query = [HKSampleQuery alloc] initWithSampleType:sampleType   predicate:predicate   limit:limit sortDescriptors:descriptor  resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error){

//對(duì)result進(jìn)行解析
HKQuantitySample *sample = resluts.firstObject;
HKQuantity *quantity = sample.quantity;

}];

[self.healthStore executeQuery:query];
[quantity doubleValueWithUnit:此處構(gòu)造一個(gè)合適的HKUnit];

構(gòu)造HKUnit

[self.healthStore preferredUnitsForQuantityTypes: completion:^(NSDictionary *preferredUnits, NSError *error){
self.unit = [preferredUnits objectForKey:[HKQuantityType alloc initWithXXXXXXX]];
}];

上面的方法的參數(shù)是HKQuantityType
返回的HKUnit可以解析HKQuantity,
獲取HKQuantity的數(shù)值:
[    doubleValueForUnit:];
使用某個(gè)單位獲取數(shù)值

寫入數(shù)據(jù)(以血糖數(shù)據(jù)為例)

參數(shù)說明:
這句使用類型和數(shù)量還有時(shí)間封裝一個(gè)HKQuantitySample,只有HKQuantitySample可以被直接保存到HealthKit中
參數(shù)說明 HKQuantityType quantity HKQuantity
HKQuantity的構(gòu)造使用單位和數(shù)值兩部分.

HKQuantitySample *sugarSample = [HKQuantitySample quantitySampleWithType: quantity  startDate: endDate:];

構(gòu)造單位

[self.healthStore preferredUnitsForQuantityTypes]
HKQuantity *quantity = [HKQuantity quantityWithUnit:self.unit doubleValue:[self.gugarValueTextField.text doubleValue]];
存儲(chǔ)數(shù)據(jù)(寫入數(shù)據(jù)):
[self.healthStore saveObject:sugarSample  withCompletion:^(BOOL success, NSError *error){
if(!success){
abort();
}
}];

數(shù)據(jù)格式化

首先保存和取出的數(shù)據(jù)類型都是HKQuantitySample

  • HKQuantitySample使用HKQuantity和HKQuantityType構(gòu)造而成
  • HKQuantity使用HKUnit和具體的數(shù)值構(gòu)造而成.
  • HKQuantityType使用常量字符串構(gòu)造例如
    HKQuantityTypeIdentifierBloodGlucose
  • HKUnit使用類方法或者HKQuantityType及[self.healthStore preferredUnitsForQuantityTypes:]方法構(gòu)造而出.

使用字符串構(gòu)造HKUnit

注意下面的字符串蘋果的文檔中并沒有提供,180.1558800000541這個(gè)數(shù)值百度為空,使用這個(gè)字符串構(gòu)造HKUnit不知道算不算使用了私有API(這個(gè)字符串是我打印對(duì)象打出來的)
這里構(gòu)造了一個(gè)血糖的單位. 毫摩爾/升 毫克/分升

HKUnit *unit = [HKUnit unitFromString:@"mmol<180.1558800000541>/L"];
        HKUnit *unit = [HKUnit unitFromString:@"mg/dl"];

直接使用字符串構(gòu)造出的Unit方便簡(jiǎn)答,只需要記錄不同的單位所對(duì)應(yīng)的字符串,毫摩爾每升這個(gè)單位對(duì)應(yīng)的字符串實(shí)在是奇葩,百度搜這串?dāng)?shù)字直接空白.使用HKUnit對(duì)取出的數(shù)據(jù)進(jìn)行格式化免去了手動(dòng)單位換算的麻煩,據(jù)說毫摩爾每升乘以18就是毫克每分升.

上面多數(shù)是以血糖數(shù)據(jù)舉例, 同理可以查詢寫入記步數(shù)據(jù), 心率, 血壓, 等等. 配合蘋果手表, 電子血糖儀, 血壓計(jì), 等外設(shè)可以自動(dòng)監(jiān)測(cè)并寫入數(shù)據(jù)到蘋果健康應(yīng)用中.

附錄 HealthKit框架體系.

類名 翻譯
NSObject 基類
HKBiologicalSexObject 枚舉類型 性別
HKBloodTypeObject 枚舉 血型
HKHealthStore 管理數(shù)據(jù)
HKObject HealthKit數(shù)據(jù)的基類
HKSample 樣本,代表了有開始時(shí)間和結(jié)束時(shí)間相關(guān)的數(shù)據(jù).
HKCategorySample 狀態(tài)樣本
HKCorrelation 復(fù)合數(shù)據(jù)樣本
HKQuantitySample 數(shù)據(jù)樣本
HKWorkout 健身樣本
HKObjectType 表示數(shù)據(jù)的類型如血糖數(shù)據(jù)?身高數(shù)據(jù)?血壓數(shù)據(jù)?
HKCharacteristicType
HKSampleType
HKCategoryType
…….
HKQuantity 某一種數(shù)據(jù)單位的數(shù)量
HKQuery 謂詞對(duì)象
HKAnchoredObjectQuery 錨查詢
HKCorrelationQuery 復(fù)合數(shù)據(jù)查詢
HKObserverQuery 觀察者查詢
HKSampleQuery 樣本查詢
HKSourceQuery 數(shù)據(jù)來源查詢
HKStatisticsCollectionQuery 統(tǒng)計(jì)集合查詢
HKStatisticsQuery 統(tǒng)計(jì)查詢
HKSource 數(shù)據(jù)來源對(duì)象
HKStatistics 統(tǒng)計(jì)對(duì)象
HKStatisticsCollection 統(tǒng)計(jì)集合對(duì)象
HKUnit 基本的數(shù)據(jù)單位
HKWorkoutEvent 健身時(shí)間

轉(zhuǎn)發(fā)請(qǐng)注明出處(簡(jiǎn)書 行如風(fēng)).

我的理解有什么錯(cuò)漏之處還請(qǐng)指出謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末傲茄,一起剝皮案震驚了整個(gè)濱河市咽扇,隨后出現(xiàn)的幾起案子诉植,更是在濱河造成了極大的恐慌,老刑警劉巖秸应,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匀钧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡路星,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門诱桂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呈昔,你說我怎么就攤上這事挥等。” “怎么了堤尾?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵肝劲,是天一觀的道長。 經(jīng)常有香客問我郭宝,道長辞槐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任粘室,我火速辦了婚禮榄檬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衔统。我一直安慰自己鹿榜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布锦爵。 她就那樣靜靜地躺著舱殿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪险掀。 梳的紋絲不亂的頭發(fā)上沪袭,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音樟氢,去河邊找鬼冈绊。 笑死侠鳄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焚碌。 我是一名探鬼主播畦攘,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼十电!你這毒婦竟也來了知押?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤鹃骂,失蹤者是張志新(化名)和其女友劉穎台盯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畏线,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡静盅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寝殴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒿叠。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚣常,靈堂內(nèi)的尸體忽然破棺而出市咽,到底是詐尸還是另有隱情,我是刑警寧澤抵蚊,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布施绎,位于F島的核電站,受9級(jí)特大地震影響贞绳,放射性物質(zhì)發(fā)生泄漏谷醉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一冈闭、第九天 我趴在偏房一處隱蔽的房頂上張望俱尼。 院中可真熱鬧,春花似錦拒秘、人聲如沸号显。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽押蚤。三九已至,卻和暖如春羹应,著一層夾襖步出監(jiān)牢的瞬間揽碘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雳刺,地道東北人劫灶。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像掖桦,于是被迫代替她去往敵國和親本昏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • The HealthKit Framework[https://developer.apple.com/libra...
    可愛的活火山閱讀 9,457評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法枪汪,類相關(guān)的語法涌穆,內(nèi)部類的語法,繼承相關(guān)的語法雀久,異常的語法宿稀,線程的語...
    子非魚_t_閱讀 31,602評(píng)論 18 399
  • 李一十八閱讀 261評(píng)論 0 1
  • 我們要養(yǎng)成一個(gè)習(xí)慣總是會(huì)遇到或多或少的問題。不經(jīng)意間總是會(huì)讓自己掉入習(xí)慣養(yǎng)成的誤區(qū)赖捌。 習(xí)慣養(yǎng)成都有哪些誤區(qū)呢祝沸? 一...
    下半輩子_閱讀 303評(píng)論 0 1
  • 今天,90后創(chuàng)業(yè)的訊息又映入眼簾越庇,望著屬于自己這個(gè)年齡段的話題難免又點(diǎn)擊了進(jìn)去罩锐。 90后的企業(yè)是玩出來的 看到這些...
    佰聞客_劉宣閱讀 421評(píng)論 0 0