使用Android平板电脑和HC-05无线电发射机从蓝牙输入流提取数据时出现问题

问题描述

我有一个项目,其中有一台HC-05无线电设备,每1秒钟发送大约500到800个字符的XML格式的数据。我在一个Android应用程序中将其接收,将其转换为String,然后使用XmlPullParserFactory处理XML。除了每5到10秒仅接收一部分已传输数据之外,其他所有东西都运行良好。然后一秒钟后,其余数据将与下一个数据集一起接收。我有几种理论,但都没有得到证实。

...目前正在研究这一理论>

我不知道HC-05无线电在内部如何工作,因此我的建议听起来可能很愚蠢,问题是,无线电在到达字符时会立即通过蓝牙发送字符,还是等待数据停止然后发送所有字符?数据放在一个“数据包”中?我当时认为这可能限制一次可以传输多少个字符,从而导致数据传输中断。但这并不一致,因此几乎不可能成为问题。

在此问题上的任何帮助将不胜感激。请在需要的地方问我清楚。

下面是将输入流转换为String的代码片段,请告诉我是否有错误

    @Override
    public void run() {
        InputStream inputStream;

        try {
            inputStream = mBTSocket.getInputStream();
            while (!bStop) {
                byte[] buffer = new byte[1200];
                if (inputStream.available() > 0) {
                    inputStream.read(buffer);
                    int i = 0;
                    for (i = 0; i < buffer.length && buffer[i] != 0; i++) {
                    }
                    final String strInput = new String(buffer,i);
                }

                Thread.sleep(100);
            }
        } catch (IOException e) {
// Todo Auto-generated catch block
            e.printstacktrace();
        } catch (InterruptedException e) {
// Todo Auto-generated catch block
            e.printstacktrace();
        }

    }

解决方法

好的,所以我过了一会儿又回到了这个问题并解决了。我以 250 毫秒的间隔发送数据包,每次传输(取决于数据长度)需要 100 毫秒才能完成。因此,使用 Thread.sleep(100) 时,新数据字符串并不总是准备好。只需将其减少到 10 就可以了。