微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

第二次不会调用 Android BLE onCharacteristicChanged

如何解决第二次不会调用 Android BLE onCharacteristicChanged

我想做什么:

我正在构建一个 android ble 应用程序,该应用程序将连接到 IOT 设备,并在发送命令时返回一些响应。

例如,当发送“STATUS”时,它会返回“STATUS OK”

正在做什么:

使用connectGatt方法我已经建立了手机和设备之间的连接。在调用发现的服务上建立连接后,我得到了服务及其特征与 UUID 以与设备交互。

GATT 客户端连接方法

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    device!!.connectGatt(context,false,callback,BluetoothDevice.TRANSPORT_LE)
} else {
    device!!.connectGatt(context,callback)
}

发现的服务及其特征:

Service 569a1101-b87f-490c-92cb-11ba5ea5167c
characteristics:
|--569a2000-b87f-490c-92cb-11ba5ea5167c: NOTIFIABLE
|------00002902-0000-1000-8000-00805f9b34fb: EMPTY
|--569a2001-b87f-490c-92cb-11ba5ea5167c: WRITABLE,WRITABLE WITHOUT RESPONSE
|--569a2002-b87f-490c-92cb-11ba5ea5167c: NOTIFIABLE
|------00002902-0000-1000-8000-00805f9b34fb: EMPTY
|--569a2003-b87f-490c-92cb-11ba5ea5167c: WRITABLE,WRITABLE WITHOUT RESPONSE

在以上四个特点中

1 (569a2000-b87f-490c-92cb-11ba5ea5167c) 和 3 (569a2002-b87f-490c-92cb-11ba5ea5167c) 用于使用 writeDescriptor 启用/禁用通知

2 (569a2001-b87f-490c-92cb-11ba5ea5167c) 用于使用特性写入写入命令(在我们的例子中为 STATUS)

4 (569a2003-b87f-490c-92cb-11ba5ea5167c) 用于向设备发送 GATT 客户端已准备好接收数据的信号。在我们的例子中,如果我们发送 1 表示 GATT 准备好接受数据,如果我们发送 0 则表示 GATT 客户端将不再监听从设备发出的数据。

所以在我从设备获得特性之后,

首先,我启用特性 1、3 的通知

其次,我在特性 4 上写入值“1”,让设备知道 GATT 客户端已准备好接受数据。

第三,我在特性 2 中发送命令“STATUS”。

发生了什么

当我在 (569a2001-b87f-490c-92cb-11ba5ea5167c) 的 writeCharacteristic 中发送“STATUS”时。我在 onCharacteristicChanged 回调中从设备收到数据响应“状态正常”。

当我第二次发送“STATUS”时,我没有得到任何回应。第二次不会调用 onCharacteristicChanged。

我试图解决的问题

我尝试在每次发送命令之前启用通知并在我第一次收到响应后禁用通知,但第二次仍然没有回调。

帮助

请帮我解决这个问题? 如果您遇到过类似的问题,请分享您的建议以进行尝试。 谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。