当我正在进行程序配对时,如何避免或解除Android的蓝牙配对通知?
我有一个应用程序,我在程序控制蓝牙配对和解除配对。 我可以在连接之前配对,然后解除配对。 我需要这样做的原因是特定于我的应用程序,而不是我的问题的范围。
基本上我正在做的是:
- 按照本答案中的描述获取
IBluetooth
对象的参考ib
- 为
android.bluetooth.device.action.PAIRING_REQUEST
注册一个BroadcastReceiver - 调用
ib.createBond(address)
- 等待BroadcastReceiver触发
- convertPinToBytes()将用户引脚转换为字节
- 从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码提供给远程设备的。