puelo
puelo

Reputation: 5977

Unable to connect BluetoothSocket to Arduino

I am currently trying to receive data on my android smartphone (version 4.4.4) send from my RFduino (some kind of arduino) via Bluetooth. Therefore i made a small android application. Now everything works fine, until i try to connect my BluetoothSocket. First i got the an IOException: read failed -1 which i tried to solve like this:

IOException: read failed, socket might closed - Bluetooth on Android 4.3

Which worked. But now my application just freezes after i call connect(). I know that this is because the method blocks until it has found a connection, but why does this not connect? My RFduino uses BluetoothBLE (low energy): Do i have to use the BluetoothGatt classes as counter-part? Here is my code:

public BluetoothConnection(Activity parentActivity) {
        this.mActivity = parentActivity;
        findBluetooth();
        openBluetooth();
    }

    private void findBluetooth() {
        this.mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (this.mBluetoothAdapter == null) {

        }

        if (!this.mBluetoothAdapter.isEnabled()) {
            Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            this.mActivity.startActivityForResult(enableBluetooth, 0);
        }

        Set<BluetoothDevice> pairedDevices = this.mBluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                if (device.getName().equals("RFduino")) {
                    this.mBluetoothDevice = device;
                    break;
                }
            }
        }
    }

    private void openBluetooth() {
        UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
        try {
            BluetoothSocket tmp = this.mBluetoothDevice.createRfcommSocketToServiceRecord(uuid);
            this.mBluetoothSocket = new NativeBluetoothSocket(tmp);
            this.mBluetoothSocket.connect();
        } catch (IOException e) {
            // try the fallback
            Log.w("BT", "Had to use fallback method!");
            try {
                this.mBluetoothSocket = new FallbackBluetoothSocket(this.mBluetoothSocket.getUnderlyingSocket());
                Thread.sleep(500);
                this.mBluetoothSocket.connect();
            } catch (FallbackException e1) {
                Log.w("BT", "Could not initialize FallbackBluetoothSocket classes.", e);
            } catch (InterruptedException e1) {
                Log.w("BT", e1.getMessage(), e1);
            } catch (IOException e1) {
                Log.w("BT", "Fallback failed. Cancelling.", e1);
            }
        }

        try {
            this.mInputStream = this.mBluetoothSocket.getInputStream();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

While NativeBluetoothAdapter and FallbackBluetoothAdapter are depicted in the thread i posted above. Thanks for any suggestions.

Upvotes: 0

Views: 238

Answers (0)

Related Questions