Bluetooth-RFCOMM-Aktualisierungen in WebSerial

François Beaufort
François Beaufort

Die Web Serial API unterstützt die Kommunikation mit RFCOMM-Diensten auf gekoppelten Bluetooth Classic-Geräten ab Chrome 117 auf dem Computer. So können kabellose In-Ear-Kopfhörer beispielsweise RFCOMM verwenden, um Audioeinstellungen und Firmwareupdates zu verwalten. Weitere Informationen finden Sie unter Serial over Bluetooth im Web.

Ab Chrome 130 für Computer können Web-Apps dank einer Verbesserung der Web Serial API erkennen, wenn ein Bluetooth-RFCOMM-Serienport verfügbar ist, ohne den Port öffnen zu müssen. So werden unnötige Neuverbindungen verhindert, wenn das drahtlose Gerät absichtlich getrennt wurde.

Wenn sich ein drahtloses Gerät außerhalb der Reichweite des Hosts befindet, wird jeder von einer Webanwendung geöffnete drahtlose serielle Anschluss automatisch geschlossen. In solchen Fällen versucht die Webanwendung möglicherweise, den Port mit der Methode SerialPort open() wieder zu öffnen. Wenn das drahtlose Gerät jedoch absichtlich getrennt wurde (z. B. vom Nutzer über die Systemsteuerung des Betriebssystems), sollte die Web-App den Anschluss nicht wieder öffnen, um eine erneute Verbindung zum drahtlosen Gerät zu verhindern.

Durch die Offenlegung des logischen Verbindungsstatus des drahtlosen Geräts, das den seriellen Port hostet, über ein neues boolesches SerialPort-connected-Attribut können Web-Apps diese Fälle jetzt unterscheiden und nur dann wieder eine Verbindung herstellen, wenn die Verbindungsunterbrechung unbeabsichtigt war.

Das Attribut SerialPort connected ist für drahtlose serielle Ports wahr, wenn das drahtlose Gerät, das den Port hostet, aktive Verbindungen zum System hat. Bei seriellen Ports mit Kabel ist der Wert „wahr“, wenn der Port physisch mit dem System verbunden ist.

Im folgenden Snippet wird gezeigt, wie du prüfen kannst, welche Geräte verfügbar sind, und dich gegebenenfalls automatisch mit ihnen verbindest.

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

Bisher wurden nur über serielle Ports mit Kabeln connect- und disconnect-Ereignisse gesendet. Bluetooth-RFCOMM-Serienports senden diese Ereignisse jetzt, wenn der Port logisch verbunden oder getrennt wird.

Demo

Demo für verbundene serielle Schnittstelle

Ressourcen

Danksagung

Vielen Dank an Jack Hsieh und Reilly Grant für ihre Rezensionen.