簡體   English   中英

如果設備關閉,嘗試在IOS應用程序中檢索以前配對的藍牙設備將無法響應失敗

[英]Trying to retrieve previously paired bluetooth device in IOS app will not respond with failure if device is off

很抱歉這個長標題,但我們在使用corebluetooth for ios時遇到了一個非常有趣的問題。 我們正在CBCentralManager中發出檢索外圍設備的調用,並且能夠找到之前配對的設備。

無論設備是打開還是關閉,都會發生這種情況。 我在蘋果的文檔中找不到任何關於為什么它能夠在關閉時找到它並且它沒有出現在設置 - >藍牙 - >設備中的設備。 我懷疑Apple正在緩存此信息,但無法找到任何文檔來確認這一點。 此外,當設備關閉並且我們發出連接調用時,程序繼續正常執行,但didFailToConnect的委托永遠不會被調用。 打開設備后,它會立即連接。

有沒有辦法在嘗試連接設備時傳遞超時參數? 如果沒有,那么處理重新連接到以前使用的應用程序設備的最佳解決方案是什么(我們將最后連接的設備存儲在應用程序中)。

關於retrievePeripherals:需要了解的兩點retrievePeripherals:connectPeripheral:

1.) retrievePeripherals:嘗試檢索與您提供的uuid相關聯的CBPeripheral對象。 即使設備關閉(或在國家的另一端), retrievePeripherals: CBPeripheral retrievePeripherals:仍然會返回一個CBPeripheral實例,您可以調用connectPeripheral: on。 這是故意這樣做的,這樣你就可以對一個甚至不在的外圍設備發出呼叫,並在它回到范圍時仍然自動連接到它。 它基本上在系統藍牙內部創建一個標記,以便在實際看到設備時,它會知道它應該連接到它。

2.) connectPeripheral:除非通信信道被實際設備斷開,否則不會超時。 如果iOS設備沒有看到設備,它將不會失敗並且不應該超時(除非系統藍牙內部發生一些錯誤)。

至於timeout參數, CoreBluetooth框架內沒有記錄的方法。 您可以為它創建自己的實現,但是我相信您最好保留一個列表,列出您實際上稱為connectPeripheral:外圍設備connectPeripheral:打開,然后在連接時從列表中彈出它們。 如果您不想再連接到列表中的外圍設備,請調用cancelPeripheral:在該UUID上,調用connectPeripheral:在另一個上,並交換條目。 很高興去。

暫無
暫無

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

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