簡體   English   中英

iOS BLE的斷開時間

[英]Disconnect time for iOS BLE

我注意到,當您在應用程序中為藍牙設備斷開連接時,iOS設備將繼續保持該連接大約10秒鍾。 我試圖通過寫一個特性來解決這個問題,該特性會導致藍牙模塊改為取消與iOS設備的連接,但是那不起作用(主要是因為我更改了模塊,而iOS看不到更改,因為我認為設備緩存在某處)。 有沒有辦法使它在代碼中立即斷開連接? 我目前正在使用swift命令manager.cancelPeripheralConnection(peripheral)

不幸的是,沒有。 告訴系統斷開外圍設備連接的cancelPeripheralConnection方法是通過您已經使用的cancelPeripheralConnection方法。 但是,如果調用此方法,則不一定意味着外圍設備將斷開連接。

背景

在iOS上,整個BLE連接管理由操作系統維護。 這意味着沒有單個應用程序“擁有”連接。 所有BLE功能都經過復用,以允許多個應用程序訪問中央和外圍設備。

例如,如果您安裝了一個健身應用程序,該應用程序在后台跟蹤來自您的心率傳感器的數據,那么您也可以“連接”到該應用程序中的心率傳感器,但是只要您的設備無法觸發真正的斷開連接,健身應用程序保持連接。

您注意到的斷開連接延遲基本上是對操作系統的優化。 如果沒有應用程序再保持與外圍設備的連接,它將等待一段時間(以避免不必要的連接/斷開循環),然后觸發藍牙芯片上的斷開連接。

希望能有所幫助。

在iOS中,當您調用CBCentralManager方法cancelPeripheralConnection(CBPeripheral)時,它並不總是立即終止連接。 如Apple的文檔所述:

由於其他應用可能仍與外圍設備保持連接,因此取消本地連接並不能保證基礎物理鏈接立即斷開。 但是,從應用程序的角度來看,外圍設備被視為已斷開連接,中央管理器對象調用了其委托對象的centralManager:didDisconnectPeripheral:error:方法。

如果您需要立即以編程方式終止連接,比如說要釋放要與另一台中央設備連接的外圍設備或重置自己的安全層,那么您需要遵循以下StackOverflow線程中所述的過程:

iOS 6-藍牙LE斷開連接

這是為了讓應用程序將自己的專有命令發送到外圍設備,該命令告訴外圍設備通過常規方式斷開連接(例如,“ H.H.H._H.C。”),例如“ GAPRole_TerminateConnection”或“ GAP_TerminateLinkReq”或“ LL_Disconnect”或“ HCI_Disconnect [_ *]”。 這始終有效,並且不會因連接監管超時而延遲,因為它是通知中央設備(即iOS)的正式斷開連接。 監督超時(在iOS中最長為6秒;在Android上默認為20秒)僅在計划外斷開連接(如超出范圍)或外圍設備斷開連接而不通知遠程設備(如“ LL_EXT_DisconnectImmed”)時起作用”(僅在某些BLE外圍設備實現中可用)。

暫無
暫無

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

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