Bluetooth connection: insecure connections, secure connections, safe eavesdropping or unreliability, which to use?

I am afraid of getting consistent bluetooth connections in star topology. I have one main phone which is a Samsung Galaxy S4 running in API 10. All phones that connect to the bluetoothserver socket on the S4 are LG Dynamic Tracfones, also running API 10.

Over the past few days, I've seen a lot of conflict information on the internet about which connection type to use.

This is my current setup:

MASTER CODE

public void acceptConnection() {

.... (enable bt adapter) ...

    // initializes a Bluetooth server socket
    bluetoothServerSocket = bc.createBluetoothServerSocket();
    //connection made to Master, discovery no longer needed
    bluetoothAdapter.cancelDiscovery();

    BluetoothSocket bluetoothSocket;

    // loops until the thread is interrupted or an exception occurs
    while (!isInterrupted()) {

        try {
            // attempts to accept the slave application connection
            bluetoothSocket = bluetoothServerSocket.accept();
        } catch (IOException e) {
            // prints out the exception stack trace
            e.printStackTrace();
            Log.v("Default Thread", "Connection to slave failed.");
            // breaks out of the while loop
            return;
        }

        try {
            ... (enumerate all input and output streams, and all bt sockets) ...
        } catch (IOException e) {
            // prints out the exception stack trace
            e.printStackTrace();
        }
    }

      

This is the method that gets called when the blueToothServerSocket is created and that's where half of my confusion is. How do I listen to the adapter? I am currently doing this insecurely.

public BluetoothServerSocket createBluetoothServerSocket() {

    // gets the name of the application
    String name = "PVCED";
    // gets a common UUID for both the master and slave applications
    UUID uuid = UUID.fromString("23ea856c-49da-11e4-9e35-164230d1df67");

    // initializes an empty Bluetooth server socket
    serverSocket = null;

    try {
        // creates a Bluetooth socket using a common UUID
        serverSocket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(name, uuid);
    } catch (IOException e) {
        // prints out the exception stack trace
        e.printStackTrace();
    }

    return serverSocket;
}

      

SLAVE CODE

And that's where the other half of my confusion is, how do I create a socket? I am currently doing this insecurely.

private BluetoothSocket createBluetoothSocket(Set<BluetoothDevice> pairedDevices) {

    // gets a common UUID for both the master and slave applications
    UUID uuid = UUID.fromString("23ea856c-49da-11e4-9e35-164230d1df67");

    // initialises an empty Bluetooth socket
    BluetoothSocket bluetoothSocket = null;

    // checks to see if there are any paired devices
    if (pairedDevices.size() > 0) {
        // loops through each paired device
        for (BluetoothDevice device : pairedDevices) {
            // checks to see if the name of the paired device is MASTER
            if (device.getName().equals("MASTER")) {
                try {
                    master = device;
                    // creates a Bluetooth socket using a common UUID
                    //bluetoothSocket = master.createRfcommSocketToServiceRecord(uuid);
                    //Method m = master.getClass().getMethod("createRfcommSocketToServiceRecord", new Class[] {int.class});
                    //bluetoothSocket = (BluetoothSocket) m.invoke(master, 1);
                    bluetoothSocket = master.createInsecureRfcommSocketToServiceRecord(uuid);
                } catch(Exception e){
                    Log.v("Connect Exception", e.getMessage());
                }
            }
        }
    }
    //check if we paired succesfully to a master, if not, prompt user to do so.
    if (master == null){
        ... (tell user to pair with master via toast) ...
    }

    return bluetoothSocket;
}

      

My logcat is often filled with errors like "Bad File Descriptor", "Unable to start Service Discovery" or "Service Discovery failed".

What's the best wiring diagram for my scenario? If you need more information on how I enable / disable bt adapters or close bt connections, I can provide more code.

+3


source to share





All Articles