为什么不同的 Android 设备允许不同的最大同时蓝牙连接数?
Why do different Android devices allow for different maximum number of simultaneous Bluetooth connections?
我有一个 Android 平板电脑,它充当蓝牙服务器,最多允许 6 个客户端连接(我设置了这个限制,因为根据蓝牙微微网规范,我知道理论上的最大值是 7 个)。我尝试使用同一制造商的两种不同型号的平板电脑:Huawei Mediapad T3 和 Huawei MediaPad T5。在 T3 上,我可以获得多达 6 个保持稳定的连接,并允许与客户端进行几乎无缝的通信。但是,在 T5 上,平板电脑不会同时接受超过 4 个连接。如果我断开一个设备,剩下的两个不断请求连接的设备之一就会被接受。我没有从对 accept() 方法的调用中收到任何错误消息,或 Android Logcat.
中有关蓝牙的任何其他错误
两台平板电脑运行都在EMUI 8.0.0下(Android 8.0.0的Huawei 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 个同时连接在两个平板电脑上工作吗?
当涉及到设备允许的最大连接数时,限制通常与硬件有关,与软件无关。换句话说,是 T5 上的蓝牙硬件阻止您创建进一步的连接。事实证明,这两款平板电脑 运行 相同 OS 但仍然存在这种差异。
我觉得奇怪的是,当您尝试超过可能的连接数时,您没有收到任何错误响应。不幸的是,我认为没有办法增加 T3 的限制。如果可能的话,我会联系华为,因为他们能够确认这种差异。
我有一个 Android 平板电脑,它充当蓝牙服务器,最多允许 6 个客户端连接(我设置了这个限制,因为根据蓝牙微微网规范,我知道理论上的最大值是 7 个)。我尝试使用同一制造商的两种不同型号的平板电脑:Huawei Mediapad T3 和 Huawei MediaPad T5。在 T3 上,我可以获得多达 6 个保持稳定的连接,并允许与客户端进行几乎无缝的通信。但是,在 T5 上,平板电脑不会同时接受超过 4 个连接。如果我断开一个设备,剩下的两个不断请求连接的设备之一就会被接受。我没有从对 accept() 方法的调用中收到任何错误消息,或 Android Logcat.
中有关蓝牙的任何其他错误两台平板电脑运行都在EMUI 8.0.0下(Android 8.0.0的Huawei 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 个同时连接在两个平板电脑上工作吗?
当涉及到设备允许的最大连接数时,限制通常与硬件有关,与软件无关。换句话说,是 T5 上的蓝牙硬件阻止您创建进一步的连接。事实证明,这两款平板电脑 运行 相同 OS 但仍然存在这种差异。
我觉得奇怪的是,当您尝试超过可能的连接数时,您没有收到任何错误响应。不幸的是,我认为没有办法增加 T3 的限制。如果可能的话,我会联系华为,因为他们能够确认这种差异。