字节数是否会降低Android上的蓝牙接收进程的速度?

时间:2017-02-19 12:29:21

标签: android bluetooth

我正在构建一个Android应用程序,使用蓝牙从Arduno发送和接收值。当超声波传感器在附近发现物体时,Arduino发送字符串“OBJECT_FOUND”。

我正在使用从教程中获取的代码。有时,当超声波传感器位于物体前面时,可以看到arduino发送的值,但是接收数据需要很长时间,并且大部分时间都不可能看到发送的值。时间对我的系统运行至关重要,我希望能够实时接收数据。

以下是代码:

public void beginListenForData() {
    final Handler handler = new Handler();
    final byte delimiter = 10; //This is the ASCII code for a newline character

    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() {
                                        if (data.equals("OBJECT_FOUND")) {
                                            anyObject = true;
                                        } else {
                                            anyObject = false;
                                        }
                                    }
                                });
                            } else {
                                readBuffer[readBufferPosition++] = b;
                            }
                        }
                    }
                } catch (IOException ex) {
                    stopWorker = true;
                }
            }
        }
    });

    workerThread.start();
}

我应该避免发送一个“大”字符串,只发送0和1来增加进程吗?

滞后可能是另一个问题造成的,我正在试图找出问题所在。

谢谢。

0 个答案:

没有答案