当我尝试为描述符设置setValue()时,我的行为很奇怪。
我正在尝试设置一个int值。
private void setDescriptor(int id) {
BluetoothGattDescriptor descriptor = characteristic.getDescriptors().get(0);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
byte[] data = new byte[1];
data[0] = (byte) (id);
descriptor.setValue(data);
mBluetoothGatt.writeDescriptor(descriptor);
}
如果id = 8,则不会调用onCharacteristicChanged()
。
如果id = 9,一切正常。
我想不出对此行为的理性解释。
答案 0 :(得分:1)
如果您查看8
和9
的二进制表示形式,我认为这可以解释:
要启用通知,请将值0000 0001b
设置为第一字节,将0000 0000b
设置为第二字节。
在您的BLE外围设备上,实现可能像这样:
void isNotificationRequested(byte value) : boolean {
return value & 0x01 > 0
}
如果您传入9
,这是对的,但对于8
,则是错误的。
这可能是您进行观察的逻辑原因,但是我不确定,因为我不知道外围设备的实现。
无论如何,如果要启用BLE通知,只需使用BluetoothGattDescriptor
类中定义的常量:
private void setDescriptor() {
BluetoothGattDescriptor descriptor = characteristic.getDescriptors().get(0);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);
}
我不确定id
变量的用途是什么?您的问题不提供任何进一步的信息。