Android蓝牙低功耗(ble)writeCharacteristic延迟回调

Lon*_*gVo 4 android bluetooth-lowenergy

我正在使用BLE Api(SDK 18)在Android上实现一个应用程序,我有一个问题,即传输数据进程延迟非常慢.这是我的日志.

03-12 16:20:05.121:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:06.272:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:06.972:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:08.254:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:10.055:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:11.257:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:12.478:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:14.250:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:14.960:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:16.242:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:16.402:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:20.225:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:20.526:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:24.219:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

03-12 16:20:25.360:D/BluetoothGatt(13578):writeCharacteristic() - uuid:...

03-12 16:20:27.222:D/BluetoothGatt(13578):onCharacteristicWrite() - Device = ... UUID = ... Status = 0

有关更多信息,我发现每个Transfer Progress只有在具有onCharacteristicWrite回调时才会完成,这意味着在接收onCharacteristicWrite回调之前所有发送命令都将被忽略.

这是我们必须遵循的Android流程还是有任何方法来设置它跳过回调步骤以加快进度.

我的代码是:

private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
......
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
    mSending = false;
}
};

private void writeCharacteristic() {
    .....

    mGattCharacSetIntensity.setValue(data);
    mGattCharacSetIntensity.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
    mBluetoothGatt.writeCharacteristic(mGattCharacSetIntensity);
    return;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我与iPhone(来自AppStore的BLE传输数据应用程序)进行了比较,BLE传输数据非常快(小于0.5秒),令人印象深刻.我们如何解决Android BLE转移进度?

编辑:如果我将BluetoothGattCharacteristic的WriteType设置为WRITE_TYPE_NO_RESPONSE,并且当我按顺序发送许多命令时,Android会将它们存储在队列中并在收到writeCharacteristic CallBack后逐个发送到远程设备,这会导致出现问题,当您停止发送时lood,Android发送进度仍然延迟(有时超过3秒).

小智 5

BLE链路的性能在很大程度上取决于所使用的连接间隔,如果您的连接间隔很高,您看到的性能可能不是那么不合理.根据核心规范,连接间隔可以在7.5毫秒到4秒之间,因此具有相当大的灵活性.

如果您有可能,我建议您尝试更改您正在谈话的外围设备,以使用更短的连接间隔,这样可以提高性能.您可以用它来查看此页面,解释BLE吞吐量,以及此页面,解释连接参数.