【问题标题】:Bluetooth Low Energy - notifyCharacteristicChanged() does not update the descriptor value低功耗蓝牙 - notifyCharacteristicChanged() 不更新描述符值
【发布时间】:2015-02-20 13:37:08
【问题描述】:

我有以下问题 - 我必须在我的应用程序工作时动态更改我的特征 (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);

感谢您的建议!

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy descriptor gatt


    【解决方案1】:

    您想要做的事情表明您的系统设计不佳。

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

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

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

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

    【讨论】:

    • 是的 - 这至少违反了事物的精神,也很可能违反了实际规范。也许它们可以有一个特性,作为模式指示符,或者有效地指向当前合适的其他几个特性之一,然后应该读取它。
    • 详情请看我上面的回答。在这里评论太长了。
    • @j.wiszowaty 我也在这里回答:HID 服务特别具有键盘报告和鼠标报告的 2 个特殊特征。使用那些!!!
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2014-08-23
    • 2018-10-12
    相关资源
    最近更新 更多