为什么不同的 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 的限制。如果可能的话,我会联系华为,因为他们能够确认这种差异。