HomeKit 允許用戶創(chuàng)建一個(gè)或者多個(gè)Home布局。每個(gè)Home(HMHome)代表一個(gè)有網(wǎng)絡(luò)設(shè)備的住所。用戶擁有Home的數(shù)據(jù)并可通過(guò)自己的任何一臺(tái)iOS設(shè)備進(jìn)行訪問。用戶也可以和客戶共享一個(gè)Home,但是客戶的權(quán)限會(huì)有更多限制。被指定為primary home的home默認(rèn)是Siri指令的對(duì)象,并且不能指定home。
每個(gè)Home一般有多個(gè)room,并且每個(gè)room一般會(huì)有多個(gè)智能配件。在home(HMHome)?中,每個(gè)房間是獨(dú)立的room,并具有一個(gè)有意義的名字,例如“臥室”或者“廚房”,這些名字可以在Siri 命令中使用。一個(gè)accessory(HMAccessory)代表實(shí)際家庭中的自動(dòng)化設(shè)備,例如車庫(kù)開門器。一個(gè)sevice(HMService)是accessory提供的?種實(shí)際服務(wù),例如打開或者關(guān)閉車庫(kù),或者車庫(kù)上的燈。
如果你的app 緩存了home布局的信息,那么當(dāng)其布局發(fā)聲改變的時(shí)候,app就需要更新這些信息。使用HMHomeManager對(duì)象可以從HomeKit數(shù)據(jù)庫(kù)獲取HMHome和其他相關(guān)的對(duì)象。本章描述的API獲取對(duì)象后,你應(yīng)該通過(guò)代理回調(diào)函數(shù)保持獲取對(duì)象和HomeKit數(shù)據(jù)庫(kù)同步,具體描述請(qǐng)參看“Observing HomeKit Database Changes".
創(chuàng)建 Home Manager對(duì)象
使用Home Manager—一個(gè)HMHomeManager對(duì)象的訪問home、room、配件、服務(wù)以及其他HomeKit對(duì)象。在創(chuàng)建家庭對(duì)象管理器(home manager)之后,直接設(shè)置它的代理,以便獲取到這些對(duì)象之后及時(shí)的通知到你。
self.homeManager?=?[[HMHomeManager?alloc]?init];
self.homeManager.delegate?=?self;
當(dāng)你創(chuàng)建一個(gè)home manager對(duì)象時(shí),HomeKit就開始從HomeKit數(shù)據(jù)庫(kù)獲取這些homes和相關(guān)對(duì)象,例如room和accessory對(duì)象。當(dāng)HomeKit正在獲取那些對(duì)象時(shí),home manager 的primaryHome屬性是nil,并且homes屬性是個(gè)空數(shù)組。你的app應(yīng)該處理用戶還沒有完成創(chuàng)建home的情況,但是app應(yīng)該等待直到HomeKit完成初始化。當(dāng)獲取對(duì)象完成之后,HomeKit 會(huì)發(fā)送homeManagerDidUpdateHomes:消息給home manager的代理。
注意:當(dāng)app進(jìn)入前臺(tái)或者在后臺(tái)Home manager屬性發(fā)生改變時(shí),這個(gè)homeManagerDidUpdateHomes:方法就會(huì)被調(diào)用,詳情請(qǐng)參閱“Observing Changes to the Collection of Homes”。
獲取Primary Home和 Homes集合
通過(guò)home manager的primaryHome屬性,可以得到primary home,代碼如下:
HMHome?*home?=?self.homeManager.primaryHome;
使用home manager的homes屬性可以得到用戶的所有home的集合;例如自家主要居所、度假別墅以及辦公室。每個(gè)home都對(duì)應(yīng)一個(gè)獨(dú)立的home對(duì)象。
HMHome?*home;
for(home?in?self.homeManager.homes?){
…}
獲取 Home中的所有room
在一個(gè)home中,rooms屬性定義accessories的物理位置。用home的rooms屬性可以枚舉home中的所room。
HMHome?*home?=?self.homeManager.primaryHome;
HMRome?*room;
for(room?in?home.rooms){
…
}
獲取Room 中的Accessories
Accessories 數(shù)組屬于home,但是被指定給了home中的room。假如用戶沒有給一個(gè)accessory指定room,那么這個(gè)accessories被指定一個(gè)默認(rèn)的room ,這個(gè)room是roomForEntireHome方法的返回值。用room的accessories屬性可以枚舉room中所有的accessory。代碼如下:
HMAccessory?*accessory;
for(accessory?in?room.accessories){
…
}
如果你要展示一個(gè)個(gè)accessory的相關(guān)信息或者允許用戶控制它,可設(shè)置accessory的代理方法并實(shí)現(xiàn)這個(gè)代理方法,詳情請(qǐng)見“Observing Changes to Accessories”.
一旦你獲取到一個(gè)accessory對(duì)象,你就可以訪問它的服務(wù)和對(duì)象,詳情請(qǐng)參閱“Accessing Services and Characteristics”。
獲取Home中的Accessories屬性
使用HMHome類中的accessories的方法,可以直接從Home對(duì)象中獲取所有的accessory對(duì)象,而不用枚舉home中的所有room對(duì)象(詳情請(qǐng)見“Getting the Accessories in a Room”。
更多建議: