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
android bluetooth connection


source to share


No one has answered this question yet

Check out similar questions:

5641
What is the difference between "px", "dip", "dp" and "sp"?
1844
What is "Context" on Android?
3
Failed to connect bluetooth keyboard to Android device
2
Bluetooth service lookup failed failed in android
2
Failed to connect to Bluetooth. java.io.IOException: read failed, socket may be closed or timed out, read ret: -1
1
Android Bluetooth connection Using RFCOMM using Insecure does not work
1
Android lag / unstable bluetooth connection
1
Connect Bluetooth 2 devices without pairing. Closing error
0
Android: BluetoothSocket connect throw IOException



All Articles
Loading...
X
Show
Funny
Dev
Pics