Electron Web蓝牙设备选择仅返回1个设备



发现,在我的电子应用程序中,main.js中的以下代码只返回长度为1的设备列表(填充一个设备(,尽管周围有很多设备。

mainWindow.webContents.on('select-bluetooth-device', (event, deviceList, callback) => {
event.preventDefault();
console.log(deviceList);
bluetoothSelection.selectBluetoothDevice(deviceList, mainWindow, (deviceId) => {
callback(deviceId);
});

如果我打电话给

navigator.bluetooth.requestDevice({
acceptAllDevices: true,
optionalServices: [serviceUuid]
})

设备多次返回更改,如果我足够频繁地循环使用,我最终会得到我想要的设备。。但我建立了一个设备选择器窗口和所有这些东西,现在窗口只为一个设备打开,这让一切都很烦人:P

关于是什么原因导致的,甚至我该如何解决,有什么想法吗?

如果您有https://www.electronjs.org/docs/latest/api/web-contents#event-选择蓝牙设备,你会发现电子提供的示例代码,你可能已经知道:

win.webContents.on('select-bluetooth-device', (event, deviceList, callback) => {
event.preventDefault()
const result = deviceList.find((device) => {
return device.deviceName === "test"
})
if (!result) {
callback('')
} else {
callback(result.deviceId)
}
})

在找到要查找的设备之前,您必须阻止回调。我建议打开第二个窗口并输入设备列表。现在,您可以显示设备并让用户选择一个。如果用户选择了一个设备,您可以关闭第二个窗口并使用此设备ID调用回调。

要在窗口之间进行通信,您可以使用"contextBridge"与"ipcRenderer"one_answers"ipcMain",并调用回调,您可以创建一个全局变量

var callbackForBluetoothEvent = null;

并将其填充到中

mainWindow.webContents.on(
// stuff
callbackForBluetoothEvent = callback; //to make it accessible outside
// stuff
);

带有"ipcMain.on">

ipcMain.on("BLEScannFinished", (event, args) => {
console.log(args);
console.log(BLEDevicesList.find((item) => item.deviceId === args));
let BLEDevicesChoosen = BLEDevicesList.find((item) => item.deviceId === args);
callbackForBluetoothEvent(BLEDevicesChoosen.deviceId);
}); 

你可以调用回调

不幸的是,对于论坛帖子来说,这是一个有点太多的代码,但你可以在链接中找到这个建议的基本解决方案:

https://github.com/grosdode/Electron-multible-BLE-devices

电子版11865也很有帮助,有一页显示了建议解决方案的替代代码。不幸的是,还有很多代码要在这里发布。

https://technoteshelp.com/electron-web-bluetooth-api-requestdevice-error/

最新更新