創(chuàng)建 Home 布局

2018-09-14 11:43 更新

創(chuàng)建 Home 布局

HomeKit 允許用戶創(chuàng)建一個或者多個 Home 布局。每個 Home(HMHome)代表一個有網(wǎng)絡(luò)設(shè)備的住所。用戶擁有Home的數(shù)據(jù)并可通過自己的任何一臺 iOS 設(shè)備進(jìn)行訪問。用戶也可以和客戶共享一個 Home,但是客戶的權(quán)限會有更多限制。被指定為 primary home 的 home 默認(rèn)是 Siri 指令的對象,并且不能指定 Home。

每個 Home 一般有多個 room,并且每個 room 一般會有多個智能配件。在 Home(HMHome) 中,每個房間是獨(dú)立的 room,并具有一個有意義的名字,例如“臥室”或者“廚房”,這些名字可以在 Siri 命令中使用。一個 accessory(HMAccessory)代表實(shí)際家庭中的自動化設(shè)備,例如車庫開門器。一個 sevice(HMService)是 accessory 提供的?種實(shí)際服務(wù),例如打開或者關(guān)閉車庫,或者車庫上的燈。

如果你的 App 緩存了 Home 布局的信息,那么當(dāng)其布局發(fā)聲改變的時候,App 就需要更新這些信息。使用 HMHomeManager 對象可以從 HomeKit 數(shù)據(jù)庫獲取 HMHome 和其他相關(guān)的對象。本章描述的 API 獲取對象后,你應(yīng)該通過代理回調(diào)函數(shù)保持獲取對象和 HomeKit 數(shù)據(jù)庫同步,具體描述請參看“Observing HomeKit Database Changes"。

創(chuàng)建 Home Manager對象

使用 Home Manager—一個 HMHomeManager 對象的訪問 home、room、配件、服務(wù)以及其他 HomeKit 對象。在創(chuàng)建家庭對象管理器(home manager)之后,直接設(shè)置它的代理,以便獲取到這些對象之后及時的通知到你。

self.homeManager = [[HMHomeManager alloc] init];
self.homeManager.delegate = self;

當(dāng)你創(chuàng)建一個 home manager 對象時,HomeKit 就開始從 HomeKit 數(shù)據(jù)庫獲取這些 homes 和相關(guān)對象,例如 room 和 accessory 對象。當(dāng) HomeKit 正在獲取那些對象時,home manager 的 primaryHome 屬性是 nil,并且 homes 屬性是個空數(shù)組。你的 App 應(yīng)該處理用戶還沒有完成創(chuàng)建 home 的情況,但是 App 應(yīng)該等待直到 HomeKit 完成初始化。當(dāng)獲取對象完成之后,HomeKit 會發(fā)送 homeManagerDidUpdateHomes:消息給 home manager 的代理。

注意:當(dāng) App 進(jìn)入前臺或者在后臺 Home manager 屬性發(fā)生改變時,這個 homeManagerDidUpdateHomes:方法就會被調(diào)用,詳情請參閱“Observing Changes to the Collection of Homes”。

獲取 Primary Home 和 Homes 集合

通過 home manager 的 primaryHome 屬性,可以得到 primary home,代碼如下:

HMHome *home = self.homeManager.primaryHome;

使用 home manager 的 homes 屬性可以得到用戶的所有 home 的集合;例如自家主要居所、度假別墅以及辦公室。每個 home 都對應(yīng)一個獨(dú)立的 home 對象。

HMHome *home;
 for(home in self.homeManager.homes ){
 …}

獲取 Home 中的所有 room

在一個 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。假如用戶沒有給一個 accessory 指定 room,那么這個 accessories 被指定一個默認(rèn)的 room ,這個 room 是 roomForEntireHome 方法的返回值。用 room 的 accessories 屬性可以枚舉 room 中所有的 accessory。代碼如下:

HMAccessory *accessory;
 for(accessory in room.accessories){
 …
 }

如果你要展示一個個 accessory 的相關(guān)信息或者允許用戶控制它,可設(shè)置 accessory 的代理方法并實(shí)現(xiàn)這個代理方法,詳情請見“Observing Changes to Accessories”。

一旦你獲取到一個 accessory 對象,你就可以訪問它的服務(wù)和對象,詳情請參閱“Accessing Services and Characteristics”。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號