Start · Sprachen · JavaScript · Referenz · Bluetooth.getAvailability()

Bluetooth.getAvailability()

Methode

Liefert ein <code>Promise&lt;boolean&gt;</code>, das angibt, ob der User-Agent grundsätzlich Bluetooth nutzen kann, also etwa ein Bluetooth-Adapter vorhanden ist.

seit JavaScript Experimentell: Chrome/Edge 78+, Opera; nicht in Fi Kategorie: webapi

Signatur

Bluetooth.prototype.getAvailability()

Beschreibung

Die Methode getAvailability() gehört zur Schnittstelle Bluetooth, die über navigator.bluetooth erreichbar ist. Sie gibt ein Promise zurück. Dieses wird nominal mit true erfüllt, wenn das System einen Bluetooth-Adapter hat und der Browser ihn verwenden kann. Andernfalls wird es mit false erfüllt.

„Nominal“ bedeutet: Der Wert ist nur ein Hinweis und keine Garantie. true heißt nicht, dass der Adapter eingeschaltet ist oder dass requestDevice() klappt. Umgekehrt darf ein Browser aus Datenschutzgründen immer false melden, zum Beispiel wenn der Nutzer Web Bluetooth abgeschaltet hat. So wird kein Fingerprinting über die Hardware möglich.

Nutzen Sie die Methode für eine progressive Oberfläche: Blenden Sie den Button „Gerät verbinden“ nur ein, wenn Bluetooth voraussichtlich verfügbar ist. Oder zeigen Sie einen Hinweis, dass ein Adapter fehlt. Wird ein Adapter später angeschlossen oder entfernt, meldet das Ereignis availabilitychanged die Änderung.

Rückgabewert

Typ
Promise<boolean>
Beschreibung
Ein Promise, das mit true erfüllt wird, wenn Bluetooth voraussichtlich verfügbar ist, und sonst mit false. Normalerweise wird es nicht abgelehnt.

Beispiele

Einfache Verfügbarkeitsprüfung

const checkBluetooth = async () => {
  // Zuerst prüfen, ob der Browser die API überhaupt kennt
  if (!('bluetooth' in navigator)) {
    console.log('Web Bluetooth wird nicht unterstützt.');
    return false;
  }
  const available = await navigator.bluetooth.getAvailability();
  console.log(available ? 'Bluetooth ist verfügbar.' : 'Kein Bluetooth-Adapter gefunden.');
  return available;
};

checkBluetooth();
Bluetooth ist verfügbar.

Verbinden-Button nur bei verfügbarem Bluetooth anzeigen

const connectBtn = document.querySelector('#connect');
const hint = document.querySelector('#bt-hint');

const updateUi = (available) => {
  connectBtn.hidden = !available;
  hint.textContent = available ? '' : 'Bitte einen Bluetooth-Adapter anschließen oder aktivieren.';
};

const init = async () => {
  if (!navigator.bluetooth) {
    updateUi(false);
    return;
  }
  updateUi(await navigator.bluetooth.getAvailability());

  // Auf Änderungen reagieren, etwa beim Ein- oder Ausstecken eines USB-Dongles
  navigator.bluetooth.addEventListener('availabilitychanged', (event) => {
    updateUi(event.value);
  });
};

init();

Verfügbarkeit prüfen, dann Gerät anfordern

connectBtn.addEventListener('click', async () => {
  if (!(await navigator.bluetooth.getAvailability())) {
    alert('Bluetooth ist nicht verfügbar.');
    return;
  }
  try {
    const device = await navigator.bluetooth.requestDevice({
      filters: [{ services: ['heart_rate'] }]
    });
    console.log('Ausgewählt:', device.name);
  } catch (err) {
    // z. B. NotFoundError, wenn der Nutzer den Auswahldialog abbricht
    console.error(err.name, err.message);
  }
});
Ausgewählt: Polar H10

// Wichtig · Fallstricke

  • Nur ein Hinweis: Auch bei true kann der Adapter ausgeschaltet sein, und requestDevice() kann trotzdem scheitern. Fangen Sie Fehler immer ab.
  • Datenschutz: Browser dürfen immer false liefern, etwa wenn Web Bluetooth per Richtlinie oder Einstellung gesperrt ist. Verlassen Sie sich nicht auf den Wert zur Hardware-Erkennung.
  • Kompatibilität: Die Methode ist experimentell. Es gibt sie nur in Chromium-Browsern (Chrome, Edge, Opera), nicht in Firefox und Safari (auch nicht in iOS-Browsern). Prüfen Sie vorher immer 'bluetooth' in navigator.
  • Sicherer Kontext: Die Methode funktioniert nur über HTTPS oder localhost. In Iframes ist sie nur erlaubt, wenn die Permissions Policy bluetooth sie zulässt.
  • Unter Linux muss Web Bluetooth in manchen Chrome-Versionen erst über chrome://flags aktiviert werden.