BLE BluetoothGattDescriptor setValue问题

时间:2018-09-17 14:13:21

标签: android bluetooth-lowenergy

当我尝试为描述符设置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,一切正常。

我想不出对此行为的理性解释。

1 个答案:

答案 0 :(得分:1)

如果您查看89的二进制表示形式,我认为这可以解释:

  • 8 = 0000 1000b
  • 9 = 0000 1001b

要启用通知,请将值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变量的用途是什么?您的问题不提供任何进一步的信息。