Я думаю, это можно объяснить, если взглянуть на двоичное представление 8
и 9
:
- 8 = 0000 1000b
- 9 = 0000 1001b
Чтобы включить уведомления, вы устанавливаете значение 0000 0001b
в качестве 1-го байта и 0000 0000b
в качестве 2-го байта.
На вашем периферийном устройстве 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
?Ваш вопрос не предоставляет никакой дополнительной информации.