我正在开发一个可以与 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;
}
答案 0 :(得分:2)
首先在特性上调用setWriteType(WRITE_TYPE_NO_RESPONSE)
,以便能够在一个连接事件中发送多个数据包。
然后你需要一次编写每个块并在发送下一个块之前等待onCharacteristicWrite,因为在Android的BLE堆栈中一次只能有一个未完成的GATT操作。