Подтвердить что ты не робот

Как я могу избежать или отклонить уведомление о соединении Bluetooth Bluetooth, когда я занимаюсь программным спариванием?

У меня есть приложение, где я программно контролирую Bluetooth-соединение и разблокировку. После этого я могу соединиться перед подключением и отключить. Причина, по которой мне нужно это сделать, относится только к моему приложению, а не к моему вопросу.

В основном, что я делаю:

  • Получить ссылку ib to IBluetooth объект, как описано в этом ответе
  • Зарегистрируйте BroadcastReceiver для android.bluetooth.device.action.PAIRING_REQUEST
  • Вызов ib.createBond(address)
  • Подождите, пока BroadcastReceiver вызовет
  • Преобразование пользовательского вывода в байты с convertPinToBytes()
  • Вызов ib.setPin(address, pinBytes) из BroadcastReceiver

В любом случае, этот подход отлично работает, за исключением того факта, что когда я делаю сопряжение, я получаю уведомление в строке состояния, запрашивая, чтобы пользователь вводил ПИН-код для завершения сопряжения. Но на самом деле это необязательно, потому что к моменту, когда пользователь это видит, мое приложение уже использовало setPin(). Мне бы очень хотелось, чтобы это уведомление либо а) не появилось вообще, либо б) было автоматически отклонено.

Я понимаю, что это может быть даже невозможно, но я думал, что попрошу, если у кого-то будет творческая идея.

4b9b3361

Ответ 1

Попробуйте сначала подтвердить подтверждение в 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);

Это работало для меня между двумя устройствами Android, использующими RFCOMM, но я не вхожу ни в какие PIN-коды.

Ответ 2

Так как Android API 19 Google переключил эти методы на общедоступные методы, так что нет необходимости в Reflection.:)

Ответ 3

Сделайте это в событии уведомления 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();

Но вы должны сказать мне, как вы связали свое удаленное устройство без ввода пользователем пароля/PIN-кода? вы знаете PIN-код для удаленного устройства, которое пытается подключиться к вашему устройству, но как вы указали этот PIN-код на удаленное устройство.