首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果没有发生错误,是否使用Android BluetoothGattCallback onCharacteristicWrite函数来假定成功?

如果没有发生错误,是否使用Android BluetoothGattCallback onCharacteristicWrite函数来假定成功?
EN

Stack Overflow用户
提问于 2022-01-07 07:15:57
回答 2查看 427关注 0票数 1

在Android应用程序上工作,通过BLE将数据发送到外围设备。关于Android BluetoothGATTCallback onCharacteristicWrite函数的问题--它如何知道写事务是成功的?在没有错误发生的情况下,是否假定成功?或者它是否记录了从写入数据的外围设备特征发送的某种类型的成功响应?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-07 14:20:28

我想说,马德夫在他的回答中的评论是不正确的,至少根据我的经验。

假设您使用“With With Response”(WRITE_TYPE_DEFAULT)而不是“写而不响应”(WRITE_TYPE_NO_RESPONSE),则适用以下内容:

首先你叫writeCharacteristic。此方法执行一些正常检查,例如您试图写入的特性具有“写”属性,在此BluetoothGatt对象上没有其他挂起的GATT操作,并且该对象没有关闭。如果通过了这些正常检查,此方法将返回true

然后将写入请求通过空中传输到远程设备的GATT服务器。在这里,请求被处理,GATT服务器返回一个写响应或一个错误响应,错误代码被发送回Android设备。当Android接收到写响应时,它将以GATT_SUCCESS (0)作为状态调用GATT_SUCCESS。如果Android接收到错误响应,它将调用onCharacteristicWrite并将状态设置为包含在错误响应中的代码。如果GATT服务器返回0x80 (应用程序错误)或0x13 (不允许值),这就是您将在回调中收到的状态代码。

如果连接在收到响应之前中断,Android将使用一些当前未记录的不成功状态代码调用回调。

如果您使用“写而不响应”(WRITE_TYPE_NO_RESPONSE),则onCharacteristicWrite的行为会发生变化。现在,这个回调被用于流控制。当本地蓝牙堆栈的缓冲区准备好接受另一个数据包时,这时您将得到回调。这种情况甚至可能发生在数据包被空中传送之前。

票数 3
EN

Stack Overflow用户

发布于 2022-01-07 09:44:06

您可以假设BLE写入事务是成功的,如果蓝牙BluetoothGatt.GATT_SUCCESSonCharacteristicWrite()的状态param等于BluetoothGatt.GATT_SUCCESS,即0

如果发生错误,状态值将指示错误类型,如

代码语言:javascript
运行
复制
/** GATT write operation is not permitted */
public static final int GATT_WRITE_NOT_PERMITTED = 0x3;

以下是关于onCharacteristicWrite()的文档摘录

参数:.status -如果操作成功,写操作BluetoothGatt.GATT_SUCCESS的结果.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70617755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档