开发者

How can I avoid or dismiss Android's Bluetooth pairing notification when I am doing programmatic pairing?

I have an app where I am programmatically controlling Bluetooth pairing and unpairing. I can pair before connection and unpair afterwards. The reason I need to do this is specific to my application and not in the scope of my question.

Basically what I am doing is:

  1. Get a refe开发者_高级运维rence ib to IBluetooth object as described in this answer
  2. Register a BroadcastReceiver for android.bluetooth.device.action.PAIRING_REQUEST
  3. Call ib.createBond(address)
  4. Wait for BroadcastReceiver to trigger
  5. Convert user pin into bytes with convertPinToBytes()
  6. Call ib.setPin(address, pinBytes) from within BroadcastReceiver

Anyways, this approach works great, except for the fact that when I do the pairing, I get a notification in the Status bar requesting that the user enter a PIN to complete the pairing. But this is in fact unnecessary, because by the time the user sees this, my app has already used setPin(). I'd really like for that notification to either a) not appear at all, or b) be dismissed automatically somehow.

I realize this may not even be possible, but I thought I would ask in case someone has a creative idea.


Try setting the confirmation first in the PAIRING_REQUEST

BluetoothDevice device = intent.getParcelableExtra("android.bluetooth.device.extra.DEVICE");

device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true);
device.getClass().getMethod("cancelPairingUserInput").invoke(device);

This worked for me between two Android devices using RFCOMM but I'm not entering any PINs


Since Android API 19 Google switched these Methods to public Methods, so there is no need for Reflection any more. :)


Do this in the PAIRING_REQUEST notification event:

BluetoothDevice localBluetoothDevice = (BluetoothDevice)intent.getParcelableExtra("android.bluetooth.device.extra.DEVICE");

Class localClass = localBluetoothDevice.getClass();
Class[] arrayOfClass = new Class[0];
localClass.getMethod("cancelPairingUserInput", arrayOfClass).invoke(paramBluetoothDevice, null)).booleanValue();

But you gotta tell me how did you pair your remote device without the user to enter Passkey/PIN? off course, you know the PIN for the remote device which is trying to pair to your device but how did you provide that PIN to the remote device.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜