Android藍牙低功耗斷開連接請求沒有發送?


Answers

Question

我們試圖斷開外設,但是使用藍牙嗅探器,我們沒有看到LL_TERMINATE_IND數據包。 相反,手機似乎繼續向外設發送Empty PDU約20秒鐘。

我們使用下面的Cordova BLE插件: https//github.com/don/cordova-plugin-ble-central

斷開方法在這裡: https//github.com/don/cordova-plugin-ble-central#/L74

我們也嘗試在gatt.disconnect()之前添加一個顯式的gatt.disconnect() ,如下所示,但似乎沒有任何區別:

public void disconnect() {
    connectCallback = null;
    connected = false;
    if (gatt != null) {
        gatt.disconnect();
        gatt.close();
        gatt = null;
    }
}

這裡是相關的adb日誌。 在adb日誌“上下文未找到”可能是相關的錯誤? 雖然這似乎是onDisconnected()之後。

04-15 16:25:34.931 24199 24199 I chromium: [INFO:CONSOLE(79263)] "ble:store       > Handle dispatch DOOR_DISCONNECT", source: file:///android_asset/www/js/bundle.js (79263)
04-15 16:25:34.931 24199 24199 I chromium: [INFO:CONSOLE(79263)] "ble:connecting  > § 20", source: file:///android_asset/www/js/bundle.js (79263)
04-15 16:25:34.932 24199 24274 D BluetoothGatt: close()
04-15 16:25:34.932 24199 24274 D BluetoothGatt: unregisterApp() - mClientIf=5
04-15 16:25:34.933  1886  9721 D BtGatt.GattService: unregisterClient() - clientIf=5
04-15 16:25:34.934  1886  2019 W bt_btif : bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0016
04-15 16:25:34.934  1886  2019 W bt_btif : bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0016
04-15 16:25:34.934  1886  2019 W bt_btif : bta_gattc_conn_cback() - cif=5 connected=0 conn_id=5 reason=0x0016
04-15 16:25:34.944  1886  1924 D BtGatt.GattService: onDisconnected() - clientIf=5, connId=5, address=00:A0:00:00:00:14
04-15 16:25:34.944  1886  1924 E BtGatt.ContextMap: Context not found for ID 5
04-15 16:25:34.948 24199 24199 I chromium: [INFO:CONSOLE(79270)] "ble:connecting  > _disconnectFromDoor success", source: file:///android_asset/www/js/bundle.js (79270)
04-15 16:25:34.952 24199 24199 I chromium: [INFO:CONSOLE(79263)] "ble:store       > Handle dispatch DOOR_DISCONNECT_SUCCESS", source: file:///android_asset/www/js/bundle.js (79263)

這裡是藍牙嗅探的樣子(有很多相同的):

有一個機會,外設已經睡在這一點上(這是為了電池壽命的目的)。 那對我來說會是有道理的,為什麼手機只是一直在發送Empty PDU ,但是我們不應該通過電波看到斷開請求嗎?