Start · Sprachen · JavaScript · Referenz · BatteryManager

BatteryManager

Schnittstelle

Das Interface <code>BatteryManager</code> der Battery Status API gibt Auskunft über Ladezustand, Ladestatus und Restlaufzeit des Systemakkus.

seit JavaScript Chromium-Browser (Chrome 38+, Edge 79+, Opera); ni Kategorie: webapi

Signatur

interface BatteryManager extends EventTarget

Beschreibung

Das Interface BatteryManager gehört zur Battery Status API. Eine Instanz erzeugt man nicht selbst. Man bekommt sie über das Promise von navigator.getBattery(). Das Objekt liefert aktuelle Werte zum Akku des Geräts und löst Ereignisse aus, sobald sich diese Werte ändern.

Die wichtigsten schreibgeschützten Eigenschaften:

  • charging (boolean): Gibt an, ob der Akku gerade geladen wird.
  • level (number): Ladestand zwischen 0.0 und 1.0.
  • chargingTime (number): Sekunden, bis der Akku voll ist. 0 heißt voll geladen, Infinity heißt, dass der Akku nicht lädt oder die Zeit unbekannt ist.
  • dischargingTime (number): Sekunden, bis der Akku leer ist. Infinity heißt, dass das Gerät lädt oder die Zeit unbekannt ist.

Dazu kommen die Ereignisse chargingchange, levelchange, chargingtimechange und dischargingtimechange. Man kann sie mit addEventListener() abonnieren oder über die passenden on…-Eigenschaften (z. B. onlevelchange) setzen.

Typische Einsatzfälle: Webanwendungen, die bei niedrigem Akkustand Strom sparen. Sie können zum Beispiel Animationen abschalten, seltener im Hintergrund synchronisieren oder Videos in geringerer Qualität laden. Man kann Nutzer auch rechtzeitig warnen, damit sie ihre Arbeit speichern, bevor das Gerät ausgeht.

Rückgabewert

Typ
BatteryManager
Beschreibung
Man erhält eine Instanz über navigator.getBattery(). Diese Methode gibt ein Promise<BatteryManager> zurück.

Beispiele

BatteryManager abrufen und Werte auslesen

const zeigeAkkuStatus = async () => {
  if (!('getBattery' in navigator)) {
    console.log('Battery Status API wird nicht unterstützt.');
    return;
  }
  const battery = await navigator.getBattery();
  console.log(`Ladestand: ${Math.round(battery.level * 100)} %`);
  console.log(`Lädt: ${battery.charging ? 'ja' : 'nein'}`);
  console.log(`Zeit bis voll: ${battery.chargingTime} s`);
  console.log(`Restlaufzeit: ${battery.dischargingTime} s`);
};

zeigeAkkuStatus();
Ladestand: 76 % Lädt: nein Zeit bis voll: Infinity s Restlaufzeit: 14820 s

Auf Änderungen reagieren und Energiesparmodus aktivieren

const initEnergiesparen = async () => {
  const battery = await navigator.getBattery();

  const pruefen = () => {
    const sparen = !battery.charging && battery.level < 0.2;
    document.body.classList.toggle('energiesparen', sparen);
    console.log(sparen ? 'Energiesparmodus an' : 'Energiesparmodus aus');
  };

  battery.addEventListener('levelchange', pruefen);
  battery.addEventListener('chargingchange', pruefen);
  pruefen();
};

initEnergiesparen();
Energiesparmodus aus

on-Eigenschaft nutzen und Listener wieder entfernen

const beobachteLaden = async () => {
  const battery = await navigator.getBattery();

  // Variante 1: Handler über die on-Eigenschaft setzen
  battery.onchargingchange = () => {
    console.log(`Netzteil ${battery.charging ? 'angeschlossen' : 'getrennt'}`);
  };

  // Variante 2: addEventListener mit späterem Entfernen
  const logZeit = () => console.log(`Restlaufzeit: ${Math.round(battery.dischargingTime / 60)} min`);
  battery.addEventListener('dischargingtimechange', logZeit);

  // nach 10 Minuten wieder abmelden
  setTimeout(() => {
    battery.removeEventListener('dischargingtimechange', logZeit);
    battery.onchargingchange = null;
    console.log('Akku-Beobachtung beendet');
  }, 10 * 60 * 1000);
};

beobachteLaden();
Netzteil getrennt Restlaufzeit: 245 min Akku-Beobachtung beendet

// Wichtig · Fallstricke

Browser-Kompatibilität: Die API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox hat sie in Version 52 aus Datenschutzgründen für Webseiten entfernt. Safari hat sie nie unterstützt. Prüfen Sie deshalb immer mit 'getBattery' in navigator, ob sie vorhanden ist, und behandeln Sie die Werte nur als zusätzliche Hilfe.

Sichere Umgebung: navigator.getBattery() steht nur in sicheren Kontexten (HTTPS) zur Verfügung. Die Permissions Policy battery kann den Zugriff sperren, z. B. in iframes.

Datenschutz: Ladestand und Restlaufzeit ergeben zusammen einen recht eindeutigen Wert. Damit ließen sich Nutzer über mehrere Seiten hinweg wiedererkennen (Fingerprinting). Browser können die Werte deshalb runden oder feste Werte liefern, z. B. level = 1, charging = true, dischargingTime = Infinity.

Randfälle: Geräte ohne Akku (Desktop-PCs) melden in der Regel einen vollen Akku, der lädt. chargingTime und dischargingTime sind oft Infinity. Fangen Sie das ab, bevor Sie die Zeiten anzeigen.