Android InputStream无法从蓝牙HC-05接收整个消息

时间:2018-05-18 11:35:16

标签: java android multithreading android-service inputstream

我的问题是从Android应用程序接收数据我从Arduino发送数据,就像{166; 122; 33; 5; n} 当我用Android打开一个套接字时,它接收前9或10个字节并向我显示166; 122; 33之类的数据。 想知道如何在InputStream中接收它。 负责这个的函数是beginListenForData(),它在这里。

  void beginListenForData() {
    final Handler handler = new Handler();
    stopThread = false;
    Thread thread = new Thread(new Runnable() {
        public void run() {
            while (!Thread.currentThread().isInterrupted() && !stopThread) {
                try {
                    final int byteCount = inputStream.available();
                    if (byteCount > 0) {
                        byte[] rawBytes = new byte[byteCount];
                        inputStream.read(rawBytes);
                        final String str = new String(rawBytes);
                        handler.post(new Runnable() {
                            public void run() {
                                if (str.charAt(0) == '{') {
                                    try {
                                        bytes = inputStream.read(buffer, 0, 
                                                                 buffer.length);
                                        String readMessage1 = new String(buffer,   
                                                          0, bytes, "US-ASCII");
                                        Log.e("bytes ",  
                                              Integer.toString(bytes));
                                        Log.e("tag:", readMessage1);
                                        sendMessage(readMessage1);

                                    } catch (IOException e) {
                                        e.printStackTrace();
                                        Log.e("tag", "failed");
                                    }
                                }


                            }
                        });

                    }
                } catch (IOException ex) {
                    sendMessage("F");
                    stopThread = true;
                }
            }
        }
    });

    thread.start();
}

1 个答案:

答案 0 :(得分:0)

> Try something like:

      void beginListenForData() {
        final Handler handler = new Handler();
        stopThread = false;
        Thread thread = new Thread(new Runnable() {
            public void run() {
                while (!Thread.currentThread().isInterrupted() && !stopThread) {
         try {
                            byte[] buffer = new byte[1];
                            bytes = mmInStream.read(buffer, 0, 1);
                            String read = new String(buffer, 0, 1);
                            readMessage.append(read);
                            if (buffer[0] == '}') {
                                bytes = mmInStream.read(buffer, 0, 1);

                                    readMessage.append(read);
      String readMessage1 = new String(buffer,   
                                                              0, bytes, "US-ASCII");
                                            Log.e("bytes ",  
                                                  Integer.toString(bytes));

                                            sendMessage(readMessage);

                                        } catch (IOException e) {
                                            e.printStackTrace();
                                            Log.e("tag", "failed");
                                        }



                                }
                            });

                        }
                    } catch (IOException ex) {
                        sendMessage("F");
                        stopThread = true;
                    }
                }
            }
        });

        thread.start();
    }