1

对编程并不陌生,但对 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”,我把这两部分发送到我的解析器(主线程),处理程序看到两条消息,但第一条消息在大小上被正确接受,但内容不正确。

4

0 回答 0