我有一个充当蓝牙服务器的 Android 平板电脑,最多允许 6 个客户端连接(我设置了这个限制,知道理论上的最大值是 7,根据蓝牙 piconet 规范)。我尝试了来自同一制造商的两种不同的平板电脑型号:华为 Mediapad T3 和华为 MediaPad T5。在 T3 上,我最多可以建立 6 个保持稳定的连接,并允许与客户端几乎无缝通信。但是,在 T5 上,平板电脑不会接受超过 4 个同时连接。如果我断开一台设备,其余两台继续请求连接的设备中的一台将被接受。我没有从对 accept() 方法的调用中收到任何错误消息,也没有收到有关 Android Logcat 中蓝牙的任何其他错误。
这两款平板电脑都在 EMUI 8.0.0(Android 8.0.0 的华为 brew)下运行。
这是我为接受连接的线程运行的代码:
private class AcceptThread extends Thread {
private BluetoothServerSocket serverSocket;
AcceptThread(String name, String uuidStr) {
btAdapter.cancelDiscovery();
try{
serverSocket = btAdapter.listenUsingInsecureRfcommWithServiceRecord(name, UUID.fromString(uuidStr));
} catch (IOException ex){
onStatusListener.OnStatus("server.error.COULD_NOT_LISTEN");
Log.e(TAG, "Could not open socket", ex);
}
}
public void run() {
onStatusListener.OnStatus("server.listening");
while (connections.size() < maxConnections) {
setState(STATE_LISTENING);
try {
BluetoothSocket socket = serverSocket.accept();
if (socket != null) {
ConnectedThread conn = new ConnectedThread(socket);
setState(STATE_CONNECTING);
conn.start();
connections.add(conn);
conn.setOnDisconnectEvent(() -> {
onStatusListener.OnStatus("server.disconnected." + socket.getRemoteDevice().getAddress());
connections.remove(conn);
});
onStatusListener.OnStatus("server.connected." + socket.getRemoteDevice().getAddress());
}
} catch (IOException ex) {
onStatusListener.OnStatus("server.error.COULD_NOT_ACCEPT");
Log.e(TAG, "Socket's accept() method failed", ex);
break;
}
}
onStatusListener.OnStatus("server.not_listening");
cancel();
}
void cancel(){
try {
setState(STATE_NONE);
serverSocket.close();
} catch (IOException e) {
Log.e(TAG, "Could not close server socket", e);
}
}
}
什么会导致我的代码在 T3 平板电脑上运行而不是在 T5 上运行?
我有什么不同的方法可以让我的 6 个同时连接同时使用两台平板电脑吗?