学渣戊 2025-07-06 10:50 采纳率: 0%
浏览 35

Electron 蓝牙在 Windows 上无法使用

本人刚入门 electronjs,很多 API 都很不熟悉;顺便听说这里已经没有真人了,但有趣的事实是,猫一生绝大多数时间都在睡觉!

现象描述

使用 Electron 构建的项目添加官网的示例代码并补充必要内容后运行 electron .,能正常显示界面,但点击官方给出的“Test bluetooth”按钮,无法正常调用蓝牙连接窗口,且报错:Uncaught (in promise) DOMException: User cancelled the requestDevice() chooser.

Running Error proof

即使是使用官方的 Electron Fiddle 工具也一样报错:

Electron Fiddle Error proof

运行环境

OS: Windows 11 Version 24H2

Win11 version proof

node: v22.16.0
npm: 10.9.2

nodejs version proof

package.json:

package.json proof

预期结果

正常来说,调用requestDevice应该弹出窗口,这个报错应该是用户点击取消按钮或者不选择点击窗口外部分取消导致的;
同时,我了解到,既然 Electron 是一个 chromium 套壳工具,且 MDN 上可以查到自 chrome56 开始就已经支持当前报错的 API requestDevice

MDN API support version proof

且我的电脑主板有蓝牙并已经安装好驱动;

Bluetooth Driver proof

且我自己装了个 chromium138 也能正常调用;

Chromium 138 version proof


Chromium 138 Success proof

且已知我使用的 Electron 37.2.0 对应的 chromium 版本是 138.7204.97,比我自己装的还高几个修订号;

Electron Release proof

等情况下,我期望 Electron 打包的应用能够弹出一个窗口让我选择可用的蓝牙设备,然后连接(自动连接已经不奢求了),再不济就去研究 tauri 了。

初步解决思路

回退到旧版本的 Electron 我也已经试过了,最早选了最多人使用的版本 23.3.13,后面 11.5.0 也试过了都不行:

npm Electron popular version proof

我现在的思路是使用 noble + bluetooth-hci-socket,起码目前只有找不到 USB 设备的报错,所以姑且认为利用 USB 蓝牙去临时解决这个问题是可行的。目前 USB 蓝牙还在路上,等到了再试试。

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-07-06 10:50
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Electron 蓝牙在 Windows 上无法使用

    你好!我看到你的问题了。 Electron 蓝牙在 Windows 上无法使用是一个常见的问题。下面是一些可能的解决方案:

    1. 检查蓝牙模块是否安装:在 Electron 中,你需要使用 bluetooth 模块来访问蓝牙设备。请检查你是否已经安装了这个模块。如果没有,可以使用 npm 安装:npm install bluetooth
    2. 检查蓝牙权限:在 Windows 中,蓝牙需要特殊权限来访问。请检查你的应用程序是否有足够的权限来访问蓝牙设备。如果没有,可以在应用程序的 manifest 文件中添加以下代码:
    "requestedPrivileges": {
      "bluetooth": {
        "read": true,
        "write": true
      }
    }
    
    1. 检查蓝牙设备是否可用:使用 bluetooth 模块来检查蓝牙设备是否可用。例如:
    const bluetooth = require('bluetooth');
    
    bluetooth.getDevices().then(devices => {
      console.log(devices);
    }).catch(error => {
      console.error(error);
    });
    

    如果你遇到了问题,可以提供更多的错误信息或代码,我将尽力帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月6日