对编程并不陌生,但对 Java 和 Android 来说却相当陌生。应用程序是蓝牙 SPP 接收每秒一次的短数据包。有时,蓝牙会给我一部分信息,然后很快就给我剩余的信息。发生这种情况时,我的接收线程向我的解析器发送相同类型的消息,但内容不同。然而,解析器从第二条消息中接收到具有第一条消息的“长度”的“数据”。
这是我的代码,我想知道我应该做些什么来区分消息,或者我是否需要检查我的接收线程是否已处理消息并休眠几毫秒,然后再试一次。意见?对不起,我正在通过我看到的例子来学习,我相信有几种方法可以做我正在做的事情。
收件人:
protected void receive() {
byte[] recvBuffer = new byte[128];
while(inStream != null) {
try {
int bytesReceived = inStream.read(recvBuffer);
System.out.println("BT-In: ");
String outString = new String(recvBuffer, 0, bytesReceived);
System.out.println(outString);
processReceive.obtainMessage(NEW_DEVICE_DATA, bytesReceived, -1, recvBuffer)
.sendToTarget();
}
catch (IOException e){
WarningBox("Warning", "Receive over Bluetooth did not work, check connection.");
break;
}
}
};
处理程序:
Handler processReceive = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
default:
break;
case NEW_DEVICE_DATA:
byte[] parseInfo = (byte[])msg.obj;
String outString = new String(parseInfo, 0, msg.arg1);
System.out.println("Parse-In: ");
System.out.println(outString);
//ParseReceivedData(parseInfo);
break;
}
}
};
现在我没有解析数据,而是试图验证我是否通过蓝牙从远程设备获取了所有内容,并且我正在正确地将其发送到解析器,解析器最终将更新我的屏幕字段。
我的日志可能看起来像这样:
BT-In: ABCabc
解析:ABCabc
BT-输入:12
BT-In: 3456789
解析:34
解析:3456789
错误是我有两个彼此靠近的蓝牙接收,说整个字符串是“123456789”,但我把它分成两部分“12”和“3456789”,我把这两部分发送到我的解析器(主线程),处理程序看到两条消息,但第一条消息在大小上被正确接受,但内容不正确。