Переопределить поведение по умолчанию для navigator.bluetooth.requestDevice()
Когда я вызываю navigator.bluetooth.requestDevice({acceptAllDevices: true}), появляется окно Chrome с устройствами вокруг меня. Я могу выбрать только 1 устройство здесь. Есть ли способ выбрать несколько устройств или нет всплывающего окна; Могу ли я реализовать свое собственное веб-окно, которое показывает устройства BLE вокруг меня?
navigator.bluetooth.requestDevice({acceptAllDevices: true})
.then(device => {
console.log(device);
});
1 ответ
Новый navigator.bluetooth.getDevices
API (в 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 чтобы отслеживать изменения.