通过连接到外部BLE设备,我最多可以发送20个字节的数据。如何发送大于20个字节的数据。我已经读到我们必须将数据分段或将特征拆分为所需的部分。如果我假设我的数据是32字节,您能否告诉我我需要在代码中进行的更改才能使其正常工作?以下是我的代码中必需的摘录:
public boolean send(byte[] data) {
if (mBluetoothGatt == null || mBluetoothGattService == null) {
Log.w(TAG, "BluetoothGatt not initialized");
return false;
}
BluetoothGattCharacteristic characteristic =
mBluetoothGattService.getCharacteristic(UUID_SEND);
if (characteristic == null) {
Log.w(TAG, "Send characteristic not found");
return false;
}
characteristic.setValue(data);
characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
return mBluetoothGatt.writeCharacteristic(characteristic);
}
这是我用于发送数据的代码。在以下onclick事件中使用“发送”功能。
sendValueButton = (Button) findViewById(R.id.sendValue);
sendValueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = dataEdit.getText().toString();
yableeService.send(text.getBytes());
}
});
当String text大于20个字节时,则仅接收前20个字节。如何纠正呢?
为了测试发送多个特征,我尝试了以下操作:
sendValueButton = (Button) findViewById(R.id.sendValue);
sendValueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = "Test1";
yableeService.send(text.getBytes());
text = "Test2";
yableeService.send(text.getBytes());
text = "Test3";
yableeService.send(text.getBytes());
}
});
但是我只收到“ Test3”,即最后一个特征。我犯了什么错误?我是BLE的新手,请忽略任何幼稚
编辑:
在为以后查看此内容的任何人接受答案之后。
有两种方法可以完成此操作。1.拆分数据并像所选答案一样循环编写。2.拆分数据并使用回调(即)进行写入onCharacterisitcWrite()。如果在编写过程中出现任何错误,这将使您免于错误。
但是,如果您只是在写而不等待固件的响应,则两次写之间最重要的是使用a Thread.sleep(200)。这将确保您的所有数据都能到达。没有sleepI,我总是得到最后一个数据包。如果您注意到已接受的答案,他也会sleep在两者之间使用。
噜噜哒
慕码人8056858