2

我有一个项目,我有一个 HC-05 无线电,每 1 秒传输大约 500 到 800 个字符的 XML 格式数据。我在一个 android 应用程序中接收它,将其转换为字符串,然后使用 XmlPullParserFactory 处理 XML。一切都很好,除了每 5 到 10 秒只有一部分传输的数据被接收到。然后它的其余部分在一秒钟后与下一个数据集一起被接收。我有一些理论,但没有得到证实。

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

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

任何有关此事的帮助将不胜感激。在需要的地方问我清楚。

下面是将输入流转换为字符串的代码片段,如果我有错误,请告诉我。

    @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, 0, i);
                }

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

    }
4

1 回答 1

0

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

于 2021-05-22T04:08:47.340 回答