BluetoothGatt:onClientConnectionState()返回status = 133

时间:2017-11-27 12:19:52

标签: android bluetooth-lowenergy hm-10

方案是:

我有android dongle运行我的应用程序,而另一方面我有一个HM10 LE蓝牙连接到esp8266。

我正在尝试通过蓝牙将安卓加密狗通过我的应用程序连接到HM10。

我在几周内成功完成了这项工作,甚至将android加密狗与不同的HM10相连,反之亦然,将HM10与其他加密狗连接起来。

问题:

经过一段时间后,在连接尝试期间,我开始收到状态为133的Disconnected状态,但在重新连接重试后连接成功。

现在,我无法使用特定的HM10连接特定的android加密狗(让我们称之为有问题的加密狗)(让我们称之为有问题的HM10)。我总是收到133,甚至有数百次重试,它无法连接。

但是,如果我使用另一个加密狗,我可以连接到“有问题的”HM10。此外,如果我使用另一台HM10,我可以连接到“有问题的”加密狗。

最后,当我将另一个HM10连接到有问题的加密狗时,就在它之后,我能够将有问题的HM10连接到有问题的加密狗。但是,如果我断开它,我将永远无法再连接。

当我尝试连接到特定的BLE设备时,我总是收到状态为133的断开连接状态。

我试图解决的问题:

重要的是要说,在正常使用过程中,HM10可以转动,反之亦然。但是,当我在Gatt回调中的“onConnectionStateChange”上抓取断开事件时,我总是关闭gatt(deviceGatt.close();)

我还在一些帖子中读到了关闭它之前刷新deviceGatt,所以我也是这样做的:

//inside the onConnectionStateChange on the BluetoothGattCallback:
case BluetoothProfile.STATE_DISCONNECTED:

                    mConnectionState = ConnectionStatus.DISCONNECTED;
                    readCharacteristic = null;
                    writeCharacteristic = null;

                    if ( status != BluetoothGatt.GATT_SUCCESS ) {

                        if ( status == 133) {
                            refreshDeviceCache(deviceGatt);
                        }

                    }

                    deviceGatt.close();
                    deviceGatt = null;

                    break;
            }


private boolean refreshDeviceCache(BluetoothGatt gatt){
        try {
            BluetoothGatt localBluetoothGatt = gatt;
            Method localMethod = localBluetoothGatt.getClass().getMethod("refresh", new Class[0]);
            if (localMethod != null) {
                boolean bool = ((Boolean) localMethod.invoke(localBluetoothGatt, new Object[0])).booleanValue();
                return bool;
            }
        }
        catch (Exception localException) {

        }
        return false;
    }

我还在一篇文章中读到了清除android设置中的缓存 - >无线和网络 - >更多 - >网络设置重置,但问题仍然存在。

请查看以下日志:

11-27 11:16:49.353 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_transmit_data, data type: 1
11-27 11:16:49.353 8104-8130/? D/bt_hci_h5: cmd opcode  = 0xfc19
11-27 11:16:49.353 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_int_transmit_data_cb data type: 5
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0008
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0008
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=5 connected=0 conn_id=5 reason=0x0008
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=6 connected=0 conn_id=6 reason=0x0008
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=7 connected=0 conn_id=7 reason=0x0008
11-27 11:16:49.353 8104-8144/? E/rtk_parse: rtk_delete_le_profile, hci_conn not exist with handle ffff
11-27 11:16:49.353 8104-8144/? I/bt_btm_sec: btm_sec_disconnected clearing pending flag handle:16 reason:8
11-27 11:16:49.354 8104-8126/? D/BtGatt.GattService: onConnected() - clientIf=7, connId=0, address=34:15:13:E6:50:8F
11-27 11:16:49.354 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_int_transmit_data_cb data type: 5
11-27 11:16:49.354 24277-24288/? D/BluetoothGatt: onClientConnectionState() - status=133 clientIf=7 device=34:15:13:E6:50:8F
11-27 11:16:49.358 24277-24288/? D/BluetoothComm: Error connecting to device: com.polidea.rxandroidble.exceptions.BleDisconnectedException: Disconnected from 34:15:13:E6:50:8F
11-27 11:16:49.359 24277-24288/? W/System.err: com.polidea.rxandroidble.exceptions.BleDisconnectedException: Disconnected from 34:15:13:E6:50:8F
11-27 11:16:49.359 24277-24288/? W/System.err:     at com.polidea.rxandroidble.internal.connection.RxBleGattCallback$2.onConnectionStateChange(RxBleGattCallback.java:76)
11-27 11:16:49.359 24277-24288/? W/System.err:     at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:184)
11-27 11:16:49.359 24277-24288/? W/System.err:     at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:70)
11-27 11:16:49.359 24277-24288/? W/System.err:     at android.os.Binder.execTransact(Binder.java:565)
11-27 11:16:49.362 24277-24324/? D/BluetoothManager: getConnectionState()
11-27 11:16:49.362 24277-24324/? D/BluetoothManager: getConnectedDevices
11-27 11:16:49.367 24277-24324/? D/BluetoothGatt: close()
11-27 11:16:49.367 24277-24324/? D/BluetoothGatt: unregisterApp() - mClientIf=7
11-27 11:16:49.368 8104-8158/? D/BtGatt.GattService: unregisterClient() - clientIf=7
11-27 11:16:49.465 8104-8130/? D/bt_vendor_uart: op for 7
11-27 11:16:49.465 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_transmit_data, data type: 1
11-27 11:16:49.465 8104-8130/? D/bt_hci_h5: cmd opcode  = 0xfc94

以下是btsnoop_hci.cfa的屏幕截图:

enter image description here

// update - 添加文件日志

以下是log file

//结束更新

我读了很多关于这个问题的帖子,但是或者没有解决方案,或者提供的解决方案不起作用。

我没有选择所以,我想知道是否有人可以帮助我。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Android软件没有任何问题。问题是BLE无线电链路似乎没有保持连接。你可以使用空气嗅探器试图监控空中的情况;数据包丢失的原因。当然也有可能两个蓝牙控制器中的任何一个'链接层行为不端。我建议验证硬件是否真的有效并且是正确的。