当我正在进行程序配对时,如何避免或解除Android的蓝牙配对通知?

我有一个应用程序,我在程序控制蓝牙配对和解除配对。 我可以在连接之前配对,然后解除配对。 我需要这样做的原因是特定于我的应用程序,而不是我的问题的范围。

基本上我正在做的是:

  1. 按照本答案中的描述获取IBluetooth对象的参考ib
  2. android.bluetooth.device.action.PAIRING_REQUEST注册一个BroadcastReceiver
  3. 调用ib.createBond(address)
  4. 等待BroadcastReceiver触发
  5. convertPinToBytes()将用户引脚转换为字节
  6. 从BroadcastReceiver中调用ib.setPin(address, pinBytes)

无论如何,这种方法效果很好,除了当我进行配对时,我会在状态栏中得到一个通知,要求用户input一个PIN来完成配对。 但是这实际上是不必要的,因为当用户看到这个时候,我的应用程序已经使用了setPin() 。 我真的很喜欢这个通知要么a)根本不出现,或b)被自动解除某种方式。

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

尝试先在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设备之间的工作,但我没有input任何PIN码

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

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

但是你必须告诉我你是如何配对你的远程设备,而不需要用户input密码/密码? 您知道正在尝试配对设备的远程设备的PIN码,但您是如何将该PIN码提供给远程设备的。