在 Web Serial 中更新藍牙 RFCOMM

François Beaufort
François Beaufort

Web Serial API 支援在電腦上透過 Chrome 117 與已配對的經典藍牙裝置上的 RFCOMM 服務進行通訊。舉例來說,這可讓無線耳機使用 RFCOMM 管理音訊設定和韌體更新。如需瞭解詳情,請參閱網路上的「透過藍牙傳輸序列資料」

自 Chrome 130 桌面版起,Web Serial API 的改善功能可讓網頁應用程式偵測藍牙 RFCOMM 序列埠可用時機,而無須開啟序列埠。這麼做可避免在無線裝置遭到刻意中斷連線時,發生不必要的重新連線情形。

無線裝置離開主機的範圍時,任何由網路應用程式開啟的無線序列埠都會自動關閉。在這種情況下,網路應用程式可能會嘗試使用 SerialPort open() 方法重新開啟通訊埠。不過,如果無線裝置是故意中斷連線 (例如使用者透過作業系統控制面板中斷連線),網路應用程式應避免重新開啟連接埠,以免重新連線至無線裝置。

透過新的布林值 SerialPort connected 屬性,公開主機無線序列埠的無線裝置邏輯連線狀態,網頁應用程式現在可以區分這些情況,並只在連線中斷是無意造成的情況下重新連線。

如果主機代管的無線裝置與系統有任何有效連線,無線序列埠的 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 提供評論。