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
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.