在Android应用程序上工作,通过BLE将数据发送到外围设备。关于Android BluetoothGATTCallback onCharacteristicWrite函数的问题--它如何知道写事务是成功的?在没有错误发生的情况下,是否假定成功?或者它是否记录了从写入数据的外围设备特征发送的某种类型的成功响应?
发布于 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
的行为会发生变化。现在,这个回调被用于流控制。当本地蓝牙堆栈的缓冲区准备好接受另一个数据包时,这时您将得到回调。这种情况甚至可能发生在数据包被空中传送之前。
发布于 2022-01-07 09:44:06
您可以假设BLE写入事务是成功的,如果蓝牙BluetoothGatt.GATT_SUCCESS
的onCharacteristicWrite()
的状态param等于BluetoothGatt.GATT_SUCCESS
,即0
如果发生错误,状态值将指示错误类型,如
/** GATT write operation is not permitted */
public static final int GATT_WRITE_NOT_PERMITTED = 0x3;
以下是关于onCharacteristicWrite()
的文档摘录
参数:.status -如果操作成功,写操作BluetoothGatt.GATT_SUCCESS的结果.
https://stackoverflow.com/questions/70617755
复制相似问题