Переопределить поведение по умолчанию для navigator.bluetooth.requestDevice()

Когда я вызываю navigator.bluetooth.requestDevice({acceptAllDevices: true}), появляется окно Chrome с устройствами вокруг меня. Я могу выбрать только 1 устройство здесь. Есть ли способ выбрать несколько устройств или нет всплывающего окна; Могу ли я реализовать свое собственное веб-окно, которое показывает устройства BLE вокруг меня?

navigator.bluetooth.requestDevice({acceptAllDevices: true})
         .then(device => {
              console.log(device);
         });

1 ответ

Новый navigator.bluetooth.getDevicesAPI (в Chrome 85 и новее) на самом деле позволяет избежать этого запроса, ЕСЛИ вы ранее использовалиrequestDevice для сопряжения устройства.

Страница Chromestatus находится здесь: https://www.chromestatus.com/feature/4797798639730688

И в нем есть ссылка на руководство разработчика.

Самый простой способ взлома:

navigator.bluetooth.getDevices().then(function(devices) {
  if (devices.length==0) put_up_button_for_requestDevice();
  else return devices[0].gatt.connect();
}).then(finish_connecting_as_normal)

API связи Bluetooth через Bluetooth GATT не позволяет вам обойти это приглашение. См. https://developers.google.com/web/updates/2015/07/interact-with-ble-devices-on-the-web

Однако предстоящий API веб-сканирования Bluetooth позволит вам сканировать близлежащие рекламные объявления и подключаться к устройствам: https://webbluetoothcg.github.io/web-bluetooth/scanning.html

Это еще не полностью реализовано в Chrome. Следите за https://github.com/WebBluetoothCG/web-bluetooth/blob/master/implementation-status.md чтобы отслеживать изменения.

Другие вопросы по тегам