我使用RxAndroidBle库连接bluetotooth设备。当我读到蓝牙设备的特性时,我得到了GATT 137异常。 为什么我无法读懂特色? 代码段:
if (device.connectionState == RxBleConnection.RxBleConnectionState.CONNECTED) {
rxConnection.readCharacteristic(ConstantsBle.deviceUUIDCharacteristic).subscribe({
Log.e(TAG, "read characteristic task is success")
}, {
it.printStackTrace()
})
}
异常详情:
W / System.err的: com.polidea.rxandroidble.exceptions.BleGattCharacteristicException: 来自MAC地址0C的GATT异常:F3:EE:2A:ED:49,状态137,类型 BleGattOperation {描述=' CHARACTERISTIC_READ'}。 (查找状态 这里是0x89 https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.1.0_r1/stack/include/gatt_api.h) W / System.err:at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.propagateErrorIfOccurred(RxBleGattCallback.java:227) W / System.err:at com.polidea.rxandroidble.internal.connection.RxBleGattCallback.access $ 800(RxBleGattCallback.java:32) W / System.err:at com.polidea.rxandroidble.internal.connection.RxBleGattCallback $ 2.onCharacteristicRead(RxBleGattCallback.java:108) 在android.bluetooth.BluetoothGatt $ 1.onCharacteristicRead(BluetoothGatt.java:286) W / System.err:at android.bluetooth.IBluetoothGattCallback $ Stub.onTransact(IBluetoothGattCallback.java:117) W / System.err:在android.os.Binder.execTransact(Binder.java:565)
答案 0 :(得分:1)
您无法读取该特性,因为您的外围设备的身份验证失败了。
状态代码:137
(0x89
hex)在Android sources中有所描述。您甚至在粘贴的日志中都有链接。
这种情况可能有以下几种原因:
请注意,配对和绑定在BLE中是两个不同的东西,尽管它们经常互换使用。
配对是一个针对特定连接的短期流程,而绑定则与后续的加密密钥交换配对(然后可以将这些配对重新用于下一个配对)。