在蓝牙Ble中发送继续数据流,延迟更少

时间:2016-07-28 10:56:47

标签: android bluetooth android-bluetooth bluetooth-lowenergy

背景

我正在开发一个可以与 Nordic 蓝牙4设备通信的Android应用程序, 我可以从北欧发送和接收数据。

问题在于,每当我想发送批量数据时,我必须将数据分成几个20字节的数据并以50ms的延迟发送

我在下面显示代码

private boolean sendBytes(byte[] iBytes){
    sendResetBytes();
    byte[] arr=new byte[20];
    for(int i=0;i<iBytes.length;i++){
        if(i!=0&&i%20==0){
            if(!mBluetoothGeneric.send(arr))return false;
            arr=new byte[20];
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        arr[i%20]=iBytes[i];
    }
    if(arr.length!=0)
        if(!mBluetoothGeneric.send(arr))return false;
    return true;
}

对于发送字节,我使用了Nordic给出的uartService库

send()我实现了简单的调用writeRxCharacteristics()fn

 public boolean writeRXCharacteristic(byte[] value)
{


    BluetoothGattService RxService = mBluetoothGatt.getService(RX_SERVICE_UUID);
    showMessage("mBluetoothGatt null"+ mBluetoothGatt);
    if (RxService == null) {
        showMessage("Rx service not found!");
        broadcastUpdate(DEVICE_DOES_NOT_SUPPORT_UART);
        return false;
    }
    BluetoothGattCharacteristic RxChar = RxService.getCharacteristic(RX_CHAR_UUID);
    if (RxChar == null) {
        showMessage("Rx charateristic not found!");
        broadcastUpdate(DEVICE_DOES_NOT_SUPPORT_UART);
        return false;
    }
    RxChar.setValue(value);
    boolean status = mBluetoothGatt.writeCharacteristic(RxChar);
    return status;
}

我的问题,是否有任何方法可以将批量数据发送到北欧而且延迟时间最短

1 个答案:

答案 0 :(得分:2)

首先在特性上调用setWriteType(WRITE_TYPE_NO_RESPONSE),以便能够在一个连接事件中发送多个数据包。

然后你需要一次编写每个块并在发送下一个块之前等待onCharacteristicWrite,因为在Android的BLE堆栈中一次只能有一个未完成的GATT操作。