2013-08-22 23 views
7

使用Android 4.3/Samsung BLE 2.0 SDK,觀察到外設關閉時,SDK將立即或延遲約20秒後收到onConnectionStateChange(DEVICE_DISCONNECTED)。根據我的經驗,這取決於外設的實現,其中一些會試圖報告它們正在關閉,有些則不會,所以SDK需要等待20秒才能超時。關閉引起意外行爲的外設

要消除這種行爲,我嘗試使用計時器來檢查是否可以讀取某個特徵。如果讀取超時,我會調用disconnect(Android 4.3)/ cancelConnection(Samsung)來終止連接。該調用本身是成功的,並且onConnectionStateChange回調函數返回狀態GATT_SUCCESS。然後,我打開外圍設備並立即連接,發現服務,並在嘗試讀取/寫入/通知任何通知時遇到問題。通過在iOS中使用LightBlue,我可以確認外設沒有連接。

在關閉外圍設備20秒後,我將收到一個DEVICE_DISCONNECTED回調。我之後再次連接,一切正常。

有兩個問題: 1.我們是否應該在20秒延遲期間連接到外設? 2.當外設關閉時,有什麼方法可以得到通知嗎?

在此先感謝。

回答

1
  1. 我們是否應該在20秒延遲期間連接到外設? 不過,這似乎從你導致本身OS是手機來控制DEVICE_CONNECTEDDEVICE_DISCONNECTED事件中做一些動作,這可能是由於以下幾個原因像設備架構,安全原因或回調本身被延遲,以節省能源

  2. 關閉外設時有什麼辦法可以得到通知嗎? 不,我不這麼認爲,任何行動收到的事件廣播,所以它等待從它自己的設備的信號,但它沒有得到一個,你可以在這裏做的唯一的事情是通過其他廣播發送它(或HTTP請求)從設備的另一端實現它

+0

您能詳細說明20秒延遲期間發生了什麼嗎?在這段時間內我可以調用斷開連接而沒有收到錯誤似乎是不合邏輯的。 – reTs