在进行程序化配对时,如何避免或取消Android的蓝牙配对通知?

时间:2011-09-07 16:06:55

标签: android bluetooth

我有一个应用程序,我以编程方式控制蓝牙配对和取消配对。我可以在连接前配对,然后取消配对。我需要这样做的原因是我的申请特定,而不是我的问题范围。

基本上我正在做的是:

  1. this answer
  2. 中所述,向ib对象获取参考IBluetooth
  3. android.bluetooth.device.action.PAIRING_REQUEST
  4. 注册BroadcastReceiver
  5. 致电ib.createBond(address)
  6. 等待BroadcastReceiver触发
  7. 使用convertPinToBytes()
  8. 将用户引脚转换为字节
  9. 从BroadcastReceiver
  10. 中呼叫ib.setPin(address, pinBytes)

    无论如何,这种方法很有效,除了我进行配对时,我在状态栏中收到通知,要求用户输入PIN以完成配对。但这实际上是不必要的,因为当用户看到这个时,我的应用已经使用了setPin()。我非常希望通知a)根本不出现,或者b)以某种方式自动被解雇。

    我意识到这可能是不可能的,但我想如果有人有创意,我会问。

3 个答案:

答案 0 :(得分:14)

尝试先在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);

这对我使用RFCOMM的两台Android设备起作用,但我没有输入任何PIN

答案 1 :(得分:11)

由于Android API 19 Google将这些方法切换为公共方法,因此不再需要Reflection。 :)

答案 2 :(得分:1)

在PAIRING_REQUEST通知事件中执行此操作:

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();

但是你必须告诉我你是如何在没有用户输入Passkey / PIN的情况下配对远程设备的?当然,您知道尝试与您的设备配对的远程设备的PIN,但您是如何将该PIN提供给远程设备的。