从桌面版 Chrome 117 开始,Web Serial API 支持与配对的传统蓝牙设备上的 RFCOMM 服务 进行通信。例如,这允许无线耳机使用 RFCOMM 来管理音频设置和固件更新。如需了解详情,请参阅网络上的蓝牙串行。
从桌面版 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 串行端口会调度这些事件。
演示
资源
致谢
感谢 Jack Hsieh 和 Reilly Grant 的审核。