我有一个函数可以连续检查蓝牙的输入流的值:
private final Runnable refresh_input = new Runnable() {
@Override
public void run() {
bt_read_input = GlobalVar.bt_input;
refresh_handler.postDelayed(refresh_input, 250);
}
};
然后另一个函数通过蓝牙发送一个十六进制字符串,然后检查上面的变量bt_read_input
以查看是否收到了答案。
答案是另一个十六进制字符串,例如2b0000
.
如果我收到此答案,则该应用程序运行正常。但有时应用程序崩溃,我意识到这是因为有时,我没有收到完整的字符串,而是收到了 2 次,例如:
1. 2b
2. 0000
所以我必须实现一个检查这个的函数。我认为这个函数可能类似于如果我收到的 byte[] 是 3 个字节长(2b0000 = 3byte),那么就可以了,但是如果小于 3,那么它应该将接收到的部分添加到一个新的 byte[] ,再次检查丢失的部分,并添加它以获得完整的字节[]。
我以这种方式启动此功能:
private byte[] ConfMsgCheck(byte[] b) { //b = bt_read_input
byte[] ConfByte = new byte[3];
if (b.length == 3) {
ConfByte = b;
}
else if (b.length < 3) {
ConfByte = b;
//here is where I don't know how to continue, because I should do something like a loop
//that checks again the value of b (bt_read_input) and adds it again to ConfByte.
}
return ConfByte;
}