Pairing two Android devices to a third device using Bluetooth

﹥>﹥吖頭↗ 提交于 2019-12-05 08:57:40

try calling cancelDiscovery() on your BluetoothAdapter before creating the socket connection. This might solve your problem on the java.io.IOException: Service discovery failed that you are getting.

I've figured out the solution to my problem.

In the method to listen then make the connection, I've written it this way:

UUID[] MY_UUID_SECURE = {UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d168"),
                                                  UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d169"),
                                                  UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d170"),
                                                  UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d171"),
                                                  UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d172")};

BluetoothServerSocket serverSocket = null;
            BluetoothSocket socket = null;

            try {
                // Listen for all UUIDs in array
                for (int i = 0; i < MY_UUID_SECURE.length; i++) {
                    serverSocket = btAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID_SECURE[i]);
                    socket = serverSocket.accept();
                    if (socket != null) {
                        BluetoothNode node = null;
                        node = new BluetoothNode(socket);
                        Log.i("connected to", node.getDeviceInformation());
                        slaveBluetoothNodes.add(node);

                        // add node to database
                        databaseManager.insertToGridTree(node.getDeviceAddress(), "slave", "active", node.getDeviceName());
                    }                       
                }
            } catch (IOException e) {
                Log.e("Accept Bluetooth Pairing Thread", "accept() failed", e);
            }

And the method for the slave devices to connect to the master:

    BluetoothDevice device = params[0];
    BluetoothSocket socket = null;

    Log.i("Bluetooth Pairing", "BEGIN ConnectThread SocketType: Secure");

    // Get a BluetoothSocket for a connection with the
    // given BluetoothDevice
    for(int i=0; i<MY_UUID_SECURE.length; i++){
        try {
            socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE[i]);
            // This is a blocking call and will only return on a
            // successful connection or an exception
            socket.connect();
            Log.i("bluetooth manager", "You have connected a slave node to this one.");

            return socket;
        } catch (IOException e) {
            Log.e("Bluetooth Pairing", "create() failed", e);
            Log.i("Bluetooth Pairing", "trying another UUID");
            try {
                socket.close();
            } catch (IOException e2) {
                Log.e("Bluetooth Pairing", "unable to close() socket during connection failure", e2);
            }
        }
    }

This project helped me figure this out: https://github.com/polyclef/BluetoothChatMulti

Hope this helps anyone having the same issue. :)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!