首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android蓝牙RFCOMM数据传输速度太慢

android蓝牙RFCOMM数据传输速度太慢
EN

Stack Overflow用户
提问于 2019-01-30 10:45:37
回答 1查看 908关注 0票数 0

我正在开发一个android app来接收来自其他硬件设备的big file (大约400万)。该设备在1382400 bps中发送数据,但我的安卓程序只接收400K。数据读取代码位于一个独立的线程中,除了从InputStream读取和计数字节读取之外,什么也不做。这是我的代码片段:

代码语言:javascript
复制
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;
}

为了找出问题,我做了很多实验:

  1. 上面的代码运行在不同的安卓手机上(从android 6.0android 8.0),当发送者发送4M数据时,这些手机可以接收数据的400K ~ 500K。显然,90%的数据在传输过程中丢失。
  2. 如果发送者设备发送一个小文件,以相同的速率发送不到2K,android就能够完全接收。它在第一个2K数据包之后开始丢失数据。
  3. 如果发送者保持相同的baudrate(1382400),但在每次1K传输后睡眠50ms,android也能够完全接收整个4M文件。
  4. 我使用android本机蓝牙共享功能将4M文件从一部安卓手机传输到另一部安卓,它在不丢失数据的情况下使用30s

第4号表示android本机支持高速率传输(> 1Mbps),但我无法在自己的代码中实现。远程设备使用HC-06串行到bluetooth适配器,该适配器可以找到文档这里。该文档在空中显示适配器支持串行和1.3Mbluetooth bps速率。

我在stackoverflow和google中搜索了很多文章,没有关于android bluetooth传输速率和低级别buffer大小的进一步信息。

有人能给我一些关于如何在android中获得高转移率的建议吗?非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2019-02-04 20:18:05

请考虑使用缓冲流。逐字节读取并将其打印到日志消息是太慢的方法。这样,就可以将字节读取的速度绑定到调试输出的速度上。

这个问题也可能与Android蓝牙串行RFCOMM低波特率/慢传输重复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54438723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档