【问题标题】:Why Android Bluetooth receive lagging on certain devices为什么 Android 蓝牙在某些设备上接收滞后
【发布时间】:2020-08-19 11:13:52
【问题描述】:

最近在使用最新的 Samsung Tab A 8.0 (SM-T290) 和 Lenovo M7 (TB-7305F)(均运行 Android v9)进行测试时,连接到某些设备时接收到的蓝牙数据会出现延迟。在连接到相同设备的旧平板电脑和手机上运行相同的应用程序没有问题。在一些较新的手机上运行相同的应用程序也没有问题。

似乎这些有问题的设备上的 InputStream 似乎缓冲了更多数据,而不是立即更新套接字读取。并且倾向于阻塞几乎完整的 BUFFER_SIZE。在没有问题的设备上,新数据几乎立即返回。

粗略的接收代码如下:

private static final int BUFFER_SIZE = 1024;
private OutputStream tx;
private InputStream rx;
private BluetoothSocket bt_socket;

public void run() {

    BluetoothDevice device = getDevice();
    if (device != null) {
        // create socket
        try {
            bt_socket = device.createInsecureRfcommSocketToServiceRecord(UUID_BLUETOOTH_SERIAL);

            bt_socket.connect();

            tx = bt_socket.getOutputStream();
            rx = bt_socket.getInputStream();

            nativeBluetoothStatusNotify(deviceName, FLAG_CONNECTED);
        } catch (IOException e) {

            try {
                bt_socket.close();
            } catch (IOException closeException) {
            }
            nativeBluetoothStatusNotify(deviceName, FLAG_CONNECTION_FAILED);
        }

        try {
            while (true) {
                int bytesRead = rx.read(buffer, 0, BUFFER_SIZE);
                String cOut = new String(buffer, 0, bytesRead, "ISO-8859-1");
                nativeBluetoothRxNotify(deviceName, buffer, cOut.length());
            }
        } catch (IOException e) {
            nativeBluetoothStatusNotify(deviceName, FLAG_RECEIVE_FAILED);
        } catch (NullPointerException e) {
            nativeBluetoothStatusNotify(deviceName, FLAG_BLUETOOTH_FAILURE);
        }
    }
}

减少 BUFFER_SIZE 确实有很大帮助,但数据仍然不稳定且延迟。

谁能提供一些关于这个或任何解决方法的见解?这是 Android 本身、我的实现还是底层蓝牙固件的问题?

【问题讨论】:

    标签: java android bluetooth android-bluetooth


    【解决方案1】:

    我最终解决了这个问题,只需确保我偶尔向这些设备发送数据,而不是在启动时进行配置然后只是坐着接收。每 500 毫秒一个心跳字符(换行)似乎是解决该问题的最基本的修复方法。

    我怀疑那些有问题的平板电脑必须进入某种蓝牙扫描/广告模式,或者一段时间不发送时可能会出现低电量;这会减慢接收速度。

    【讨论】:

      猜你喜欢
      • 2022-08-10
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多