簡體   English   中英

iOS BLE 應用程序中的重新連接過程

[英]Reconnection procedure in iOS BLE application

考慮一個場景,我與運行 iOS 5.1 的 iPhone 4S 的對等設備建立了綁定連接。

然后由於某種原因(用戶啟動或其他原因)斷開連接。

在這種情況下,如果應用程序必須自動重新連接到先前配對的設備,據我所知,Apple 公開了 APIretrieve_peripheral,它應該在填充了先前連接或配對的外圍結構的情況下給 did_retrieve_peripheral 回調。

使用這個外圍實例,我可以比較我之前配對的 uuid,如果匹配可以嘗試連接(重新連接)。 但是我無法獲取外圍設備,因為在確實檢索外圍設備回調時計數為 0。

我錯過了什么嗎?

也有沒有人嘗試在應用程序中復制或存儲整個外圍結構,其中包括(在外圍發現的服務、特征等)。 並在重新連接中使用它。

要使用retrievePeripheral API,您需要將CBPeripheral UUID 保存在某處(我使用CoreData)。 retrievePeripheral 調用將 UUID 的 NSArray 作為參數。 看起來您沒有向retrievePeripheral 調用提供保存的UUID。 當您的 didRetrievePeripherals 回調被調用時,您將獲得一個 CBPeripheral 對象數組。 然后您可以重新連接到這些外圍設備。 您不需要掃描這些,也不需要與外圍設備配對。

我有同樣的問題,我想一個解決方案:當連接丟失時,master 必須以與我們掃描和連接相同的方式掃描外圍設備,slave 必須傳遞到 advertisin 狀態,並且兩者都必須識別 caracteristics 服務 uuid 和 caracteristics再次服務。

這就是我要嘗試重新連接的方式。

當然,我認為我們必須以自己的方式刷新更多功能

當您成功連接到設備時,您應該保存外圍 UUID (peripheral.identifier.UUIDString)。 我正在使用 NSUserDefaults 來保存 UUID。

當您想連接到設備時,請使用 CBCentralManager 中的以下方法retrievePeripheralsWithIdentifiers:並將 UUID 作為參數傳遞。 這將返回一組 CBPeripherals,找到你的並連接到它。

不要試圖將 CBPeripheral 對象保存在任何地方。 這是一個非常糟糕的主意。 只需使用其 UUID。

如果您的設備已經連接到手機,您可以使用 CBCentralManager 中的retrieveConnectedPeripheralsWithServices方法檢索CBPeripheral 對象。 您需要傳遞外圍設備正在使用的服務作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM