我正在开发android app
以便从其他硬件设备接收big file
(约4M)。设备以1382400 bps
发送数据,但我的Android程序仅接收400K
。数据读取代码在一个独立的线程中,除了从InputStream
中读取数据外,不执行任何操作,并对读取的字节计数。这是我的代码段:
try {
socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
socket.connect();
InputStream is = socket.getInputStream();
byte[] buf = new byte[1024];
int byteRead ;
while ((byteRead = is.read(buf)) > 0) {
totalBytes += byteRead;
Log.v(LOG_TAG, "read byte:" + totalBytes);
}
} catch (IOExcepiton e) {
Log.e(LOG_TAG, "Connect to bluetooth device failed.", e);
return null;
}
我已经做了很多实验来找出问题所在:
android 6.0
到android 8.0
)上运行,当发送方发送400K ~ 500K
数据时,它们可以接收4M
数据。显然,传输过程中会丢失90%的数据。2K
),则android能够完全接收。在第一个2K
数据包之后,它开始丢失数据。baudrate(1382400)
,但在每次50ms
传输后休眠1K
,则android也能够完全接收整个4M
文件。4M
文件从一台Android手机传输到另一台android,大约需要30s
,而不会丢失数据。第4位表示android原生支持高速率传输(> 1Mbps
),但我无法在自己的代码中实现。
远程设备使用HC-06
串行到bluetooth
适配器,可以在here中找到该文档。该文档显示了适配器支持1.3M
bps串行速率和空中bluetooth
速率。
我在stackoverflow和google中搜索了很多文章,没有关于android bluetooth
传输速率和较低级别buffer
大小的更多信息。
有人可以给我一些有关如何在android
中获得高传输率的建议吗?非常感谢。
答案 0 :(得分:0)
请考虑使用缓冲流。逐字节读取并将其打印到日志消息的速度太慢了。这样,您可以将字节读取的速度绑定到调试输出的速度。
这个问题可能也重复到 Android Bluetooth Serial RFCOMM low baud rate / slow transmission