1. 程式人生 > >IOS開發之HomeKit(三)

IOS開發之HomeKit(三)

       上一篇文章我們只是介紹瞭如何獲取新增移除home和room物件,這篇繼續往下走。還需要說的一點就是,我們所新增或者移除的這些homeKit物件都是會儲存在一個共享的homeKit資料庫中的。可以被多個應用程式通過homeKit框架訪問,我們在自己寫的homeKitAPP中新增和移除的home,room等homekit物件,在系統自帶的家庭APP中的資料都是同步的。

  獲取room中的智慧硬體物件(已經新增的)

       獲取到了room之後,當然是要獲取其中的智慧裝置物件了。那麼如何獲取Room 中的Accessories呢?

      Accessories 陣列屬於home,但是被指定給了home中不同的room。假如使用者沒有給一個accessory指定room,那麼這個accessories被指定一個預設的room ,這個room是roomForEntireHome方法的返回值。用room的accessories屬性可以列舉room中所有的accessory。這個是官方文件中的描述。

        我大白話來一遍:比如說我的home中有一個智慧燈泡,一個智慧冰箱,一個智慧熱水器,一個智慧電視。我把燈泡指定給了臥室這個room,冰箱指定給了廚房這個room,熱水器指定給了衛生間room。電視沒有指定room,那麼就預設給它指定了一個room,這個room就是 HMRoom *defultRoom = [home roomForEntireHome]。當我需要獲取到我的智慧硬體物件的時候,我通過home.accessories獲取到的是我家的所有智慧硬體,也就是燈泡,冰箱和洗衣機以及電視。如果room是臥室,我通過room.accessories獲得到的就是燈泡(我這裡就舉一個例子,臥室也可以有多個硬體),如果room是廚房,我通過room.accessories獲得到的就是冰箱。

所以:HMAccessory *accessory;

for(accessory in room.accessories)

{  //獲取到room中的所有 accessory物件}

HMAccessory *accessory;

for(accessory in hoom.accessories)

{  //獲取到hoom中的所有accessory物件}

      一旦我們獲取到accessory物件,我們就可以展示一個個accessory的相關資訊或者訪問它的服務和物件這樣就可以允許使用者控制它,可設定accessory的代理方法並實現這個代理方法。如何控制後邊再說,接下來先來說一說接下來這三個問題。

1.怎麼找到一個新的accessory

2.如何為accessory指定room

3.如何來移除一個accessory

先說第一個問題:

      Accessories封裝了物理配件的狀態,因此它不能被使用者建立,也就是說我們不能去建立智慧硬體物件,只能通過去搜尋它,然後新增。想要允許使用者給家新增新的配件,我們可以使HMAccessoryBrowser物件在後臺搜尋一個與home沒有關聯的配件,當它找到配件的時候,系統會呼叫委託方法來通知你的應用程式。

首先,在你需要搜尋配件的VC.h檔案中宣告HMAccessoryBrowserDelegate,新增一個HMAccessoryBrowser物件屬性:


然後在.m檔案viewdidload裡邊建立物件設定代理:


建立一個搜尋按鈕,在按鈕的點選方法裡開始搜尋硬體,並且實現代理方法:


點選按鈕開始搜尋新的智慧硬體,如果搜尋到硬體系統會通過didFindNewAccessory這個回撥方法來通知我們發現了硬體,每次發現一個智慧硬體這個方法都會呼叫一次(我這裡使用模擬器開了兩個只能硬體裝置),log列印如下:


所以我這裡每次發現一個硬體之後裝入一個數組,然後用tableview顯示出來:


程式執行效果如圖:


顯示搜尋到了洗衣機和電視兩個智慧硬體

我們可以在離開頁面的時候停止搜尋新的裝置:


當然也可以設定一個btn來停止搜尋

現在說第二個問題:

拿到一個新的accessory物件之後,我們怎麼為其指定一個room呢?

      我這邊為了方便,先這樣處理。上圖中我使用一個表把搜尋到的裝置列出來了,tableview下邊的黃色介面是一個scrollview,可以左右滑動展示所有的room。我們點選某一個裝置之後,就直接新增給當前顯示的room中。如下圖:


上圖中的兩個方法就是將外設新增到home和room中的方法

新增外設和指定room的方法都是由HMHome物件呼叫的。如果我們只是向home中添加了裝置,沒有指定room那麼它就會被放入到一個預設的room中,上文中已經說到了。

下邊看一下執行效果,還是上圖中搜索到的洗衣機和電視兩個智慧硬體物件,當我點選了洗衣機之後,


因為使用的是模擬器,所以會有警告框,點選仍然新增就好了。點選之後,會彈出一個系統的配置頁面:


上邊的黑框是掃碼的,我們使用的是模擬器,所以我們點選手動輸入程式碼,將模擬器顯示的程式碼輸入進去:


這是輸入介面

這是模擬器顯示的介面,輸入紅框中的程式碼:


輸入程式碼程式碼之後,我們看控制檯列印的輸出:


此時,我們就成功的向臥室添加了一個洗衣機(我也不知道為什麼我向臥室放一個洗衣機,哈哈)。。。。。。接下來我們就可以去更新UI來進行展示了。

現在說第三個問題

我們如何來更改accessory的名字,還有移除一個已經新增到home中的accessory物件呢?

更改名字:


更改名字

移除一個裝置:


移除裝置

       這一篇基本把Accessory的相關處理介紹了一下,其實還有一些別的零碎東西,這裡就不再介紹贅述,這些基本就夠用了。獲取到智慧硬體之後,後邊我們繼續介紹如何去控制現有的裝置,因為這裡已經牽扯到了需要使用模擬器了,所以下次還是先介紹一下模擬器的使用。