Just My Life & My Work

半年前透過人家寫好的藍芽裝置SDK,輕鬆愉快實現App各種功能,現在必須自己寫SDK這一層,也就是透過iOS SDK,來實現藍芽各種連線相關的功能。此刻,我來研究重連藍芽裝置

使用核心藍牙(Core Bluetooth)框架,有三種方式可以重連一個外設。你可以:

  1. 獲取已知外設的列表—你曾經發現或者鏈接的外設—使用retrievePeripheralsWithIdentifiers:方法。如果你尋找的外設在這個列表裡,嘗試去鏈接它。
  2. 用retrieveConnectedPeripheralsWithServices:方法獲取當前連接到系統的外設列表。如果你尋找的外設在這個列表裡,本地連接它。
  3. 用scanForPeripheralsWithServices:options:方法掃描發現外設。如果找到就連接。

取決於使用場景,你可能不想掃描發現相同的外設,每當你想重連它的時候。相反,你可能首先使用其他選項,嘗試重連。如圖所示,一個可能的重連工作流是嘗試每個選項。

一個示例重連工作流

BLE Retrieve.jpg

總覺得看了這圖後,就能完全掌握實作的流程!

備註:你決定嘗試的重連選項的數量,還有它們的順序,可能隨著使用場景而變化。例如,你可能不使用第一種連接選項,或者你想同時使用前兩種選項。

獲取已知外設列表

第一次發現外設時,系統會生成一個標識符來標識外設。你可以存儲這個標識符,後面在retrievePeripheralsWithIdentifiers方法裡使用這個標識符來重連外設。下面描述一個方式,使用這個方法重連你以前連接過的一個外設。

當你的應用啟動時,調用retrievePeripheralsWithIdentifiers:方法,傳入你先前發現和連接過的外設的標識符數組,像這樣:

knownPeripherals =
[myCentralManager retrievePeripheralsWithIdentifiers:savedIdentifiers];

中心管理器會嘗試匹配這些標識符,然後返回一個CBPeripheral對象的數組。如果沒有發現匹配,這個數組為空,你可以嘗試其他兩個重連選項。如果這個數組不為空,讓用戶選擇重連哪個外設。

當用戶選擇一個外設時,調用connectPeripheral:options:嘗試連接它。如果這個外設依然可以連接,中心管理器會調用centralManager:didConnectPeripheral:代理方法,重連成功。

備註:一個外設可能因為某些原因無法連接。例如,這個設備可能不在中心的附近。除此之外,一些BLE設備會使用一個隨機的地址,它會周期性的改變。因此,即使這台設備就在附近,但是它的地址可能已經變了,在這種情況下,你嘗試連接的CBPeripheral對象跟實際的設備就無法對應。如果因為地址改變而無法連接這個外設,你需要使用scanForPeripheralsWithServices:options:方法重新發現它。

獲取已連接外設列表

另外一種重連外設的方式是,判斷你正在尋找的設備是否已經連接到系統。(例如,被其他應用)。你可以調用retrieveConnectedPeripheralsWithServices:方法,它會返回當前連接到系統的外設數組。

因為可能存在多個連接到系統的外設,你可以傳入一個CBUUID對象的數組來獲取唯一的外設,它當前連接到系統並且包含你指定的所有服務。如果當前沒有外設連接到系統,這個數組就是空的,你應該嘗試其他兩個重連選項其中之一。如果這個數組不為空,讓用戶決定重新連接哪一個。

假設用戶發現和選擇了想要的外設,通過調用connectPeripheral:options:方法連接到你的應用。(儘管這台設備已經連接到系統,你依然可以可以連接它,然後開始探索並與之交互)當本地連接建立後,中心管理器會調用代理方法centralManager:didConnectPeripheral: ,這個台外設就重連成功了。

以上參考高人翻譯Apple開發者文件,已經實現我要的藍芽重新連線功能囉:)~

參考:Core Bluetooth 開發ReConnect BLE Device

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: