取消BluetoothGatt读/写操作?

时间:2017-05-22 14:37:59

标签: android bluetooth bluetooth-lowenergy

我是Android上BLE开发的新手,我正在查看API文档,并没有看到取消已经“排队”到远程设备的读/写特性/描述符操作的方法。我怎样才能做到这一点?

具体来说,在调用以下内容后,如何在超时后取消写入(使用AsyncTask在其他地方处理)?

private void writeCharacteristic(BluetoothGatt gatt) {
    Log.i(TAG, "Writing to " + mCharacteristic);
    characteristic.setValue(mPayload);
    gatt.writeCharacteristic(mCharacteristic);
}

2 个答案:

答案 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
          }
}

特征和描述符的所有写/读操作都会产生类似的结果。