Signatur
Beschreibung
Die Eigenschaft chargingTime des BatteryManager-Interfaces gehört zur Battery Status API. Sie gibt als Zahl an, wie viele Sekunden das Gerät voraussichtlich noch braucht, bis der Akku voll ist. Ein BatteryManager-Objekt bekommst du über das Promise von navigator.getBattery().
Diese Werte sind möglich:
- positive Zahl: geschätzte Restladezeit in Sekunden (das Gerät lädt gerade)
0: Der Akku ist vollständig geladen, oder das Gerät hat keinen Akku (z. B. ein Desktop-PC am Netzstrom)Infinity: Der Akku entlädt sich (charging === false), oder die Plattform kann die Restzeit (noch) nicht schätzen
Die Eigenschaft eignet sich für Hinweise in der Oberfläche („Voll geladen in ca. 25 Minuten“) oder um rechenintensive Aufgaben wie Synchronisation, Video-Verarbeitung oder Backups aufzuschieben, bis das Gerät am Strom hängt oder der Akku voll ist. Wenn sich der Wert ändert, löst der BatteryManager das Ereignis chargingtimechange aus. Darauf solltest du reagieren, statt den Wert regelmäßig abzufragen.
Rückgabewert
double); 0 bei vollem Akku bzw. ohne Akku, Infinity beim Entladen oder wenn die Zeit unbekannt ist.Beispiele
Restladezeit einmalig auslesen
const zeigeLadezeit = async () => {
if (!('getBattery' in navigator)) {
console.log('Battery Status API wird nicht unterstützt.');
return;
}
const battery = await navigator.getBattery();
console.log('Restladezeit (s):', battery.chargingTime);
};
zeigeLadezeit();
Werte lesbar formatieren – inklusive 0 und Infinity
const formatiereLadezeit = (sekunden) => {
if (sekunden === 0) return 'Akku ist voll geladen';
if (!Number.isFinite(sekunden)) return 'Lädt nicht bzw. Restzeit unbekannt';
const stunden = Math.floor(sekunden / 3600);
const minuten = Math.round((sekunden % 3600) / 60);
return stunden > 0
? `Voll in ca. ${stunden} h ${minuten} min`
: `Voll in ca. ${minuten} min`;
};
const battery = await navigator.getBattery();
console.log(formatiereLadezeit(battery.chargingTime));
Auf Änderungen mit chargingtimechange reagieren
const battery = await navigator.getBattery();
const anzeige = document.querySelector('#ladezeit');
const aktualisieren = () => {
const t = battery.chargingTime;
anzeige.textContent = t === 0
? 'Voll geladen'
: Number.isFinite(t)
? `Noch ${Math.round(t / 60)} Minuten`
: 'Nicht am Ladegerät';
};
// Variante 1: addEventListener
battery.addEventListener('chargingtimechange', aktualisieren);
// Variante 2: gleichwertig über die on-Property
// battery.onchargingtimechange = aktualisieren;
aktualisieren();
// Später aufräumen:
// battery.removeEventListener('chargingtimechange', aktualisieren);
Aufwendige Aufgabe erst bei vollem Akku starten
const warteAufVollenAkku = async () => {
const battery = await navigator.getBattery();
if (battery.chargingTime === 0) return;
await new Promise((resolve) => {
const pruefen = () => {
if (battery.chargingTime === 0) {
battery.removeEventListener('chargingtimechange', pruefen);
resolve();
}
};
battery.addEventListener('chargingtimechange', pruefen);
});
};
await warteAufVollenAkku();
console.log('Akku voll – starte Backup ...');
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox hat sie aus Datenschutzgründen ab Version 52 entfernt, Safari hat sie nie unterstützt. Prüfe die Unterstützung immer mit
'getBattery' in navigator. - Sicherer Kontext:
navigator.getBattery()gibt es nur über HTTPS (bzw.localhost). Per Permissions-Policy (battery) kann die Nutzung in iframes blockiert werden. - Auf
Infinityprüfen: Beim Entladen ist der WertInfinity, nicht0odernull. Rechnest du damit direkt weiter (z. B.Math.round(t / 60)), kommt wiederInfinityheraus. Prüfe deshalb mitNumber.isFinite(). - Mehrdeutige
0: Auch Geräte ohne Akku melden0(zusammen mitcharging === trueundlevel === 1). Aus0kannst du also nicht sicher schließen, dass überhaupt ein Akku vorhanden ist. - Ungenauigkeit: Der Wert ist eine Schätzung des Betriebssystems. Er kann direkt nach dem Einstecken des Ladegeräts eine Zeit lang
Infinitybleiben, stark schwanken oder aus Datenschutzgründen gerundet sein. - Datenschutz: Akkuwerte wurden schon für Fingerprinting missbraucht. Nutze sie nur, wenn sie wirklich einen Mehrwert bringen, und nicht zur Wiedererkennung von Nutzern.