1

我有以下问题 - 我必须在我的应用程序工作时动态更改我的特征 (BluetoothGattCharacteristic) 中的描述符 (BluetoothGattDescriptor)。

不幸的是,来自 BluetoothGattServer 的函数 notifyCharacteristicChanged() 仅更新特征的值(在 Andoird 源中查找此函数 - https://github.com/android/platform_frameworks_base/blob/master/core/java/android/bluetooth/BluetoothGattServer.java ),它会忽略描述符。

我的描述符只读取一次 - 建立连接时。但我想动态地改变它,每次重新连接都不是这里的选择。

添加两个具有相同 UUID 但描述符不同的服务或特征并不能解决问题 - 无法区分它们。

有人遇到过类似的问题吗?

这是代码:

BluetoothGattCharacteristic bc = mBluetoothGattServer.getService(service).getCharacteristic(characteristic);
bc.setValue(data);
bc.getDescriptor(descriptor).setValue(new byte[]{0, 0});      <- no effect here
mBluetoothGattServer.notifyCharacteristicChanged(connectedDevice, bc, false);

感谢您的任何建议!

4

1 回答 1

5

你想做的事情表明你的系统设计不好。

特征描述符通常不会被服务器的主机随时间改变。无论哪种方式,本着 BLE 的精神,只有 Characteristic 的可以通知给客户端。

您想“动态地”更改它的事实是不对的。你为什么?

如果它对你的整个应用程序有一些重要的、有意义的数据,那么就创建一个新的 Characteristic。

特征描述符的目的应该只是“解释”应该如何使用特征的值、它的格式、它的单位等。

于 2015-02-20T14:04:15.097 回答