Web Serial 中的蓝牙 RFCOMM 更新

François Beaufort
François Beaufort

Web Serial API 支持在桌面版 Chrome 117 中与配对的蓝牙传统设备上的 RFCOMM 服务进行通信。例如,这样一来,无线入耳式耳机就可以使用 RFCOMM 来管理音频设置和固件更新。如需了解详情,请参阅在 Web 上通过蓝牙进行串行通信

从桌面版 Chrome 130 开始,Web Serial API 进行了改进,让 Web 应用能够检测蓝牙 RFCOMM 串行端口何时可用,而无需打开端口。这样可以防止在无线设备被有意断开连接时不必要地重新连接。

当无线设备超出主机的范围时,Web 应用打开的所有无线串行端口都会自动关闭。在这种情况下,Web 应用可能会尝试使用 SerialPort open() 方法重新打开端口。但是,如果无线设备是被有意断开的(例如,用户通过操作系统控制台断开的),则 Web 应用应避免重新打开端口,以防止重新连接到无线设备。

通过新的布尔值 SerialPort connected 属性公开托管无线串行端口的无线设备的逻辑连接状态,Web 应用现在可以区分这些情况,并且仅在意外断开连接时重新连接。

如果托管端口的无线设备与系统有任何有效连接,则无线串行端口的 SerialPort connected 属性为 true。对于有线串行端口,如果端口已物理连接到系统,则为 true。

以下代码段展示了如何检查哪些设备可用以及可能自动连接到这些设备。

const ports = await navigator.serial.getPorts();
for (const port of ports) {
  if (port.connected) {
    // Automatically try to connect to the Bluetooth device.
    await port.open({ baudRate: 9600 });
  } else {
    // Otherwise, when the port is not logically connected:
    // 1. Prompt the user to make sure the Bluetooth device is available.
    // 2. Show a "connect" button to try opening the port.
  }
}

以前,只有有线串行端口会分派连接断开连接事件。现在,当端口逻辑连接或断开连接时,蓝牙 RFCOMM 串行端口会调度这些事件。

演示

SerialPort 连接演示。

资源

致谢

感谢 Jack Hsieh 和 Reilly Grant 提供的评价。