【问题标题】:Electron Web Bluetooth Device selection returning only 1 deviceElectron Web 蓝牙设备选择仅返回 1 个设备
【发布时间】:2022-05-04 21:05:39
【问题描述】:

发现在我的电子应用程序中,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

对可能导致此问题的原因或什至如何解决此问题有任何想法吗?

【问题讨论】:

  • 我设法获得了更多设备,在 select-bluetooth-device 处理程序中一个接一个地收集它们,并在循环中调用 navigator.bluetooth.requestDevice。你在这个问题上有什么进展吗?

标签: electron web-bluetooth


【解决方案1】:

如果您查看https://www.electronjs.org/docs/latest/api/web-contents#event-select-bluetooth-device,您会发现您可能已经知道电子提供的示例代码:

    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)
    }
  })

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

要在窗口之间进行通信,您可以使用带有“ipcRenderer”和“ipcMain”的“contextBridge”并调用回调,您可以创建一个全局变量

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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多