在 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.
  }
}

先前,只有有線序列埠會傳送 connectdisconnect 事件。藍牙 RFCOMM 序列埠現在會在埠邏輯連線或中斷連線時,傳送這些事件。

示範

SerialPort 連線示範。

資源

致謝

感謝 Jack Hsieh 和 Reilly Grant 提供評論。