【发布时间】: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