我是Android上BLE开发的新手,我正在查看API文档,并没有看到取消已经“排队”到远程设备的读/写特性/描述符操作的方法。我怎样才能做到这一点?
具体来说,在调用以下内容后,如何在超时后取消写入(使用AsyncTask在其他地方处理)?
private void writeCharacteristic(BluetoothGatt gatt) {
Log.i(TAG, "Writing to " + mCharacteristic);
characteristic.setValue(mPayload);
gatt.writeCharacteristic(mCharacteristic);
}
答案 0 :(得分:1)
你做不到。写请求被发送到远程设备,它以写响应回答。收到Write Response后,将调用onCharacteristicWrite回调。 BLE协议中没有指定“取消”。而是指定30秒超时。如果远程设备在30秒内未发送写入响应,则链接将被丢弃。这是在Android的蓝牙堆栈中为您实现的。由于GATT协议一次只有一个未完成的请求,因此无法“重试”该操作。
答案 1 :(得分:0)
我建议不要以这种方式处理操作,因为无法保证任何蓝牙LE操作在X时间内成功或失败。距离,干扰等因素都会影响您的操作。
您将获得有关BluetoothGattCallback方法操作的明确结果。例如:
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicWrite(gatt, characteristic, status);
if (status==BluetoothGatt.SUCCESS)
{
//operation completed successfully
}
else
{
//operation failed
}
}
特征和描述符的所有写/读操作都会产生类似的结果。