After performing a bleScan and giving the user their device to select, I then take that get that device via the getRemoteDevice(address) call.
Once I get that BluetoothDevice object, I then call createBond(). Since createBond() triggers an async operation, I have BroadcastReceiver listening for the results and confirm that the device has paired/bonded when I received a BONDED result in the receiver.
This is pretty standard procedure for bonding with a BT device.
The issue I'm running into is that under seemingly random conditions, the built in pair/connect dialog does not appear.
Through some testing I found that if I swipe down on the phone, long press bluetooth and click "Pair a New Device" and the device shows up in the list...I can then return to my app, call createBond() and the PIN dialog appears.
This tells me there's something iffy with some type of Bluetooth Cache or something along those lines.
I'm trying to determine why this might be and if there's something I should be ensuring that I do BEFORE calling createBond to ensure the pin dialog appears.
I can post relevant code but it's really just a one-liner
boolean bondInitiated = getDevice().createBond();
After I call create bond there's typically a 1-2 second pause and then the pin dialog appears.
Can someone offer some insight here? Is there a better way to pair with a BT device from Android other than calling createBond()
I'd LOVE to just give the user a PIN text box, let them enter the pin shown on the BT device (it's a glucometer) and then pair that way but I've not seen a way to do that.
Unfortunately, there isn't a standard way to always show the pairing dialog to the user. This is because the pairing process is dependant on the hardware, and some OEMs have modified how it works at the OS level. As such, there are variations depending on the hardware that is being used.
However, there might be some "hacks" that you can implement to get this to work. Have a look at this link as it includes details on the bondong process and the pairing popup. It's a bit outdated (3 years ago), but it includes the following paragraph:-
So if you want you can try to make the popup always appear in the foreground by doing discovering for 1 second before connecting to a device. It is a bit of a hack but it works.