Сопряжение Bluetooth - как отобразить простой диалог отмена / сопряжение?



Я подготовил простой тестовый проект для этого вопроса на GitHub.



Я пытаюсь создать приложение для Android, которое будет сканировать QR-код с экрана компьютера, а затем использовать данные (MAC-адрес и PIN-код или хэш) для простого сопряжения (соединения) с устройством Bluetooth.

Похоже на популярноеприложение InstaWifi - но для классического Bluetooth.



В целях тестирования я пока не делаю никакого сканирования штрих-кодов, а просто показываю список устройства:



список устройств



После того, как пользователь коснется одного из устройств, сопряжение выполняется в MainActivity.java :



private void startBluetoothPairing(BluetoothDevice device) {
Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.PAIRING_VARIANT_PIN);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, 1234);
//device.setPin(new byte[]{1,2,3,4}); <- DOES NOT CHANGE ANYTHING
//device.setPairingConfirmation(false);
startActivityForResult(pairingIntent, REQUEST_BT_SETTINGS);
}


К сожалению, всплывающее окно по-прежнему запрашивает PIN-код:



контактный диалог



Поскольку я фактически указал PIN-код в своем исходном коде, я на самом деле ожидал, что будет показано другое, более простое системное диалоговое окно (это показано при выполнении сопряжения NFC OOB):



диалог пар



Из поиска решений я знаю, что существует setPin () метод, но он здесь неприменим (или нет?)- потому что я пытаюсь подключить весь смартфон к устройству Bluetooth, а не только приложение...



Мой вопрос: Как сделать Android OS, чтобы показать простой диалог отмены/пары?



Поиск запроса на сопряжение Bluetooth строки на GitHub не показал никаких подсказок...



UPDATE: по предложению unrealsoul007 (спасибо) я обновил исходный код в MainActivity.java а теперь появится простое диалоговое окно отмена / пара:



private void startBluetoothPairing(BluetoothDevice device) {
Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION);
pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(pairingIntent, REQUEST_BT_PAIRING);
}


Однако я не уверен, как завершить процесс сопряжения - потому что onActivityResult вызывается с resultCode=0 еще до закрытия диалога:



@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
// this is called before user clicks Cancel or Pair in the dialog
if (requestCode == REQUEST_BT_PAIRING) {
if (resultCode == Activity.RESULT_OK) { // 0 != -1
Log.d("XXX", "Let#s pair!!!!"); // NOT CALLED
}

return;
}
}
615   1  

1 ответ:

Вам будет предложено ввести pin-код, потому что это то, что вы запрашиваете в своем pairingIntent.

Вместо использования

pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
                BluetoothDevice.PAIRING_VARIANT_PIN);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, 1234);

Использовать

pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PASSKEY_CONFIRMATION);

Как уже упоминалось здесь ,

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

Comments

    Ничего не найдено.