当前位置: 代码迷 >> Android >> Android蓝牙串行通信读取符号“。”
  详细解决方案

Android蓝牙串行通信读取符号“。”

热度:95   发布时间:2023-08-04 10:09:32.0

我已经编写了用于连接到蓝牙HC-05,将命令发送到HC-05并接收与发送的命令相关的不同数据的Android代码。 Android应用程序连接了蓝牙,在发送第一个命令时,它将接收我想要的确切数据,但是在下一个命令中,它将接收符号“ ...”以及相关数据。

我已经在Android上与其他蓝牙终端一起测试了硬件电路,并且效果很好。

以下是我的串行通信代码:

void beginListenForData() {
        final Handler handler = new Handler();
        final byte delimiter = 10; 
        stopWorker = false;
        readBufferPosition = 0;
        readBuffer = new byte[1024];
        workerThread = new Thread(new Runnable() {
            public void run() {
                while (!Thread.currentThread().isInterrupted() && !stopWorker) {
                    try {
                        int bytesAvailable = mmInputStream.available();

                        if (bytesAvailable > 0) {
                            byte[] packetBytes = new byte[bytesAvailable];
                            mmInputStream.read(packetBytes);

                            for (int i = 0; i < bytesAvailable; i++) {
                                byte b = packetBytes[i];
                                if (b == delimiter) {
                                    byte[] encodedBytes = new        byte[readBufferPosition];
                                    System.arraycopy(readBuffer, 0,
                                            encodedBytes, 0,
                                            encodedBytes.length);
                                    final String data = new String(
                                            encodedBytes,"US-ASCII" );
                                    readBufferPosition = 0;

                                    handler.post(new Runnable() {
                                        public void run() {
                                            sampleView.setText(data);
                                            str = sampleView.getText()
                                                    .toString();
                                            Log.i("Data", data);                                        
 }

                                    });
                                } else {
                                    readBuffer[readBufferPosition++] = b;
                                }
                            }
                        }

                    } catch (IOException ex) {
                        stopWorker = true;
                    }
                }

            }


        });

        workerThread.start();
        try {


            String command1=command.getText().toString();
            mmOutputStream.write(command1.getBytes());



        } catch (IOException e) {

            e.printStackTrace();
        }
    }

请帮忙!!

有时,这种混乱的代码会发生,您应该注意自己的字符集格式。您可以将命令都转换为“ UTF-8”。

另一种情况可能是:您从错误的开始或结束位置读取数据。

  相关解决方案