蓝牙InputStrem读取字节分为两部分

时间:2015-12-24 05:20:11

标签: android bluetooth inputstream android-bluetooth

我正在使用蓝牙串行连接在Android应用和微控制器之间进行通信。我能够在App和MC之间进行通信。但是我从MC发送的消息分为两部分。例如,如果我通过蓝牙发送$F05,A,B,C,0#,它会将我的消息分成两部分,如下所示。第一部分是$,其余部分是F05,A,B,C,0#。您可以按如下方式查看我的日志cat输出。

12-24 10:40:19.926 17999-18183/? V/PRAVEEN: $
12-24 10:40:20.027 17999-18183/? V/PRAVEEN: F15,A,0,0,0#

我将这个消息发送到整个坚果android分为两部分。我的代码是

        public void run() {
        try{
            int bytes;
            while (true){
                try{
                    avilableBytes=inputStream.available();
                    byte[] buffer=new byte[avilableBytes];
                    if (avilableBytes>0){
                        bytes=inputStream.read(buffer);
                        final String readMessage=new String(buffer);
                        Log.v("PRAVEEN",readMessage);
                        if (bytes>=3){
                            bt_handler.obtainMessage(handlerState,bytes,-1,readMessage).sendToTarget();
                        }
                        else {
                            SystemClock.sleep(100);
                        }
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

请帮助我获取我发送的实际字符串。谢谢。

1 个答案:

答案 0 :(得分:2)

假设您正在使用rfcomm,请按照以下步骤操作。在我的例子中,我发送了两个有效载荷:第一个是消息的大小,第二个是消息本身。

while (true) {
            Log.d(TAG, "listening to InputStream");
            try {
                // Read from the InputStream
                int messageSizeBufferSize = mmInStream.readInt();
                Log.d(TAG, messageSizeBufferSize+"<mSBS");
                Log.d(TAG, "Run");

                if(messageSizeBufferSize == 0)
                    continue;
                Log.d(TAG, "Message of size "+messageSizeBufferSize);
                bytes = 0;
                buffer = new byte[messageSizeBufferSize];
                while(bytes < messageSizeBufferSize) {
                    Log.d(TAG, "Reading bits "+bytes+" for mmInStream");
                    bytes += mmInStream.read(buffer,bytes,messageSizeBufferSize - bytes);
                }
                Log.d(TAG, "Read RFCOMM message completely");
                String message = new String(buffer);
                Log.d(TAG, "Read "+message);
            } catch (IOException e) {

                break;
            }
        }