Android BLE 4.3 onDescriptorWrite在启用特征通知时返回状态128

时间:2013-08-26 18:28:55

标签: android bluetooth-lowenergy gatt

使用新的Android BLE 4.3启用特征的问题:

我没有收到来自BLE设备的任何通知,尽管我使用队列异步地逐个启用特征通知。

我还使用ENABLE_NOTIFICATION_VALUE用UUID“00002902-0000-1000-8000-00805f9b34fb”编写描述符。

我遵循了Google sdk doc的建议以及各种论坛的建议。

顺便说一句,我在“onDescriptorWrite”上得到status = 128。这个状态意味着什么?

我通过谷歌代码,没有看到任何关于此的信息。即使是源代码也不会像设置此状态那样轻松。

如果您为身体媒体设备启用了通知,请告诉我们是否有人遇到此问题。有时我在描述符写入时获得状态133。我使用最新的Nexus 7进行测试。

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,并通过禁用和重新启用蓝牙接口解决了这个问题。

Android BLE堆栈似乎仍然不成熟,并且存在不稳定性问题。

答案 1 :(得分:2)

此错误可能与Android操作系统强加的最大阈值有关。

#define BTA_GATTC_NOTIF_REG_MAX     15

 - for 4.3 max number of notification/indication is 4 
 - for 4.4 max number of notification/indication is 7
 - for 5.0 max number of notification/indication is 15

https://groups.google.com/forum/#!topic/android-platform/FNHO5KB4sKI

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.0.2_r1/bta/gatt/bta_gattc_int.h

答案 2 :(得分:0)

答案非常晚,但对于在GATT_NO_RESOURCES电话中遇到状态128(gatt.writedescriptor())的任何人来说,这可能都很有价值。

在我的情况下,当尝试为ENABLE_NOTIFICATION_VALUE编写描述符时,状态128显示为需要通过ENABLE_INDICATION_VALUE订阅指示的特征。

所以而不是

BluetoothGattDescriptor descriptor = bluetoothGattCharacteristic.getDescriptor(DESCRIPTOR_UUID);
descriptor.setValue(ENABLE_NOTIFICATION_VALUE);
mGatt.writeDescriptor(descriptor);

前往

BluetoothGattDescriptor descriptor = bluetoothGattCharacteristic.getDescriptor(DESCRIPTOR_UUID);
descriptor.setValue(ENABLE_INDICATION_VALUE);
mGatt.writeDescriptor(descriptor);

修正了问题。我假设反过来会产生相同的错误状态128.

答案 3 :(得分:-1)

使用writeCharacteristic属性执行WriteNoResponse时收到此错误。当我为WriteWithoutResponse指定writeCharacteristic参数时,问题就会消失。