写入 BLE char_write_req

write to BLE char_write_req

我想更改通知,所以我这样做了:

BluetoothGattCharacteristic init_gatt=mConnectedGatt.getService(SERVICE_UUID).getCharacteristic(CHAR_2_UUID);
                mConnectedGatt.setCharacteristicNotification(init_gatt,true);
                BluetoothGattDescriptor descriptor = init_gatt.getDescriptor(
                        UUID.fromString("00002902-0000-1000-8000-00805F9B34FB"));
                descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
                descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
                boolean success=mConnectedGatt.writeDescriptor(descriptor);
                init_gatt.setValue(new byte[]{0x19});
                mConnectedGatt.writeCharacteristic(init_gatt);

所以成功是真的,但是永远不会调用 onCharacteristicChanged()。 我的一位同事在馅饼上完成了 这里我得到了一个 gatttool 写请求的例子。

gatttool -b <MAC Address> --char-write-req --handle=0x0031 --value=0100 --listen android

其中参数是char-write-req 0x16 01:00

那么有没有办法在 android 中做同样的事情?

问题是 Android 不处理句柄 。我着迷于尝试获取句柄,但我通过启用通知解决了问题。我构建了一个状态机,在其中我逐步启用了每个描述符通知,现在它可以工作了。所以我的代码通常是正确的,但当我获得成功启用标志时我不得不重复它。

This video 很好地解释了您必须如何处理它。