使用 android 平板电脑和 HC-05 无线电发射器从蓝牙输入流中提取数据时出现问题
Problems with extracting data from Bluetooth input stream, using android tablet and HC-05 radio transmitter
我有一个项目,我有一个 HC-05 收音机,每 1 秒传输大约 500 到 800 个字符的 XML 格式化数据。我在 android 应用程序中收到它,将其转换为字符串,然后使用 XmlPullParserFactory 处理 XML。一切都很好,除了每隔 5 到 10 秒只有一部分传输数据被接收到。然后它的其余部分在一秒钟后与下一个数据集一起被接收。我有一些理论,但 none 证明了。
...目前正在研究这个理论 >
我不知道 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();
}
}
好的,所以我稍后又回到了这个问题并解决了。我以 250 毫秒的间隔发送数据包,每次传输(取决于数据长度)需要 100 毫秒才能完成竞争。因此,对于 Thread.sleep(100),当新数据字符串进入时,它并不总是准备就绪。只需将其减少到 10 就可以正常工作。
我有一个项目,我有一个 HC-05 收音机,每 1 秒传输大约 500 到 800 个字符的 XML 格式化数据。我在 android 应用程序中收到它,将其转换为字符串,然后使用 XmlPullParserFactory 处理 XML。一切都很好,除了每隔 5 到 10 秒只有一部分传输数据被接收到。然后它的其余部分在一秒钟后与下一个数据集一起被接收。我有一些理论,但 none 证明了。
...目前正在研究这个理论 >
我不知道 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();
}
}
好的,所以我稍后又回到了这个问题并解决了。我以 250 毫秒的间隔发送数据包,每次传输(取决于数据长度)需要 100 毫秒才能完成竞争。因此,对于 Thread.sleep(100),当新数据字符串进入时,它并不总是准备就绪。只需将其减少到 10 就可以正常工作。