Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Connect Bluetooth device automatically after pairing programmatically

In my app I need pairing bluetooth device and immediately connect with it.

I have the following function in order to pairing devices:

public boolean createBond(BluetoothDevice btDevice)
{
    try {
        Log.d("pairDevice()", "Start Pairing...");
        Method m = btDevice.getClass().getMethod("createBond", (Class[]) null);
        Boolean returnValue = (Boolean) m.invoke(btDevice, (Object[]) null);
        Log.d("pairDevice()", "Pairing finished.");
        return returnValue;

    } catch (Exception e) {
        Log.e("pairDevice()", e.getMessage());
    }
    return false;
}

And I use it as the following way:

Boolean isBonded = false;
try {
    isBonded = createBond(bdDevice);
    if(isBonded)
    {
         //Connect with device
    }
}

And it show me the dialog to pairing devices and enter the pin.

The problem is that createBond functions always return true, and it doen's wait until I enter the pin and paired with device, so I don't use correctly:

isBonded = createBond(bdDevice);
if(isBonded) {...}

So the question is How can I paired with device and when it is paired connect to it?

P.D My code is based in the first answer of the following thread: Android + Pair devices via bluetooth programmatically

like image 752
RdlP Avatar asked Feb 14 '14 10:02

RdlP


People also ask

How do I make Bluetooth connect automatically?

A headset or a speaker doesn't reconnect automaticallyReturn to Settings, search for Bluetooth auto-connect and enable this feature. Make sure that the other device is within the effective Bluetooth range from your smartphone and restart it. Re-enable Bluetooth on the phone and check if the issue is fixed*.

Does Bluetooth automatically connect to other devices?

You can use Bluetooth to connect some devices to your phone without a cord. After you pair a Bluetooth device for the first time, your devices can pair automatically.

How does Bluetooth Auto Connect work?

Bluetooth Auto Connect is a new generation application that will allow any Android smartphone to connect Bluetooth audio headset, devices, or just pinch files. You can plug in multiple devices and headsets to your Android at once and they will work perfectly. You can turn Bluetooth off when you don't use them often.

Why my Bluetooth is connecting automatically?

If your Android device keeps turning on Bluetooth for no reason, then you can try rebooting it first. If it's a minor glitch or a background process that is forcing Android to turn on Bluetooth repeatedly, restarting your device should resolve the issue.


1 Answers

I found the solution.

First I need a BroadcastReceiver like:

private BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
                // CONNECT
            }
        } else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Discover new device
        }
    }
};

And then I need register the receiver as follow:

IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
context.registerReceiver(myReceiver, intentFilter);

In this way the receiver is listening for ACTION_FOUND (Discover new device) and ACTION_BOND_STATE_CHANGED (Device change its bond state), then I check if the new state is BOND_BOUNDED and if it is I connect with device.

Now when I call createBond Method (described in the question) and enter the pin, ACTION_BOND_STATE_CHANGED will fire and device.getBondState() == BluetoothDevice.BOND_BONDED will be True and it will connect.

like image 52
RdlP Avatar answered Nov 15 '22 01:11

RdlP