Battery Status

The Battery Status API allows Web applications to get the information about the device's power source, battery charge level, expected time of charging or discharging. It also exposes events whenever any of the information available changes. The API allows the applications to turn on/off its energy inefficient operations according to the power levels.

API glimpse

navigator.getBattery()
Returns a Promise resolved with the object containing battery information.
battery.charging
Returns true if the device is currently being charged.
battery.chargingTime
Returns the number of seconds remaining until the battery is fully charged.
battery.dischargingTime
Returns the number of seconds remaining until the battery is fully discharged.
battery.level
Returns the battery charging level as the number in 0 to 1 range.
battery.addEventListener('chargingchange', listener)
An event fired when battery.charging value has changed.
battery.addEventListener('chargingtimechange', listener)
An event fired when battery.chargingTime value has changed.
battery.addEventListener('dischargingtimechange', listener)
An event fired when battery.dischargingTime value has changed.
battery.addEventListener('levelchange', listener)
An event fired when battery.level value has changed.

Live Demo

Initial battery status was unknown, charging time unknown, discharging time unknown, level unknown.

  • if ('getBattery' in navigator || ('battery' in navigator && 'Promise' in window)) {
      var target = document.getElementById('target');
    
      function handleChange(change) {
        var timeBadge = new Date().toTimeString().split(' ')[0];
        var newState = document.createElement('p');
        newState.innerHTML = '<span class="badge">' + timeBadge + '</span> ' + change + '.';
        target.appendChild(newState);
      }
      
      function onChargingChange() {
        handleChange('Battery charging changed to <b>' + (this.charging ? 'charging' : 'discharging') + '</b>')
      }
      function onChargingTimeChange() {
        handleChange('Battery charging time changed to <b>' + this.chargingTime + ' s</b>');
      }
      function onDischargingTimeChange() {
        handleChange('Battery discharging time changed to <b>' + this.dischargingTime + ' s</b>');
      }
      function onLevelChange() {
        handleChange('Battery level changed to <b>' + this.level + '</b>');
      }
    
      var batteryPromise;
      
      if ('getBattery' in navigator) {
        batteryPromise = navigator.getBattery();
      } else {
        batteryPromise = Promise.resolve(navigator.battery);
      }
      
      batteryPromise.then(function (battery) {
        document.getElementById('charging').innerHTML = battery.charging ? 'charging' : 'discharging';
        document.getElementById('chargingTime').innerHTML = battery.chargingTime + ' s';
        document.getElementById('dischargingTime').innerHTML = battery.dischargingTime + ' s';
        document.getElementById('level').innerHTML = battery.level;
        
        battery.addEventListener('chargingchange', onChargingChange);
        battery.addEventListener('chargingtimechange', onChargingTimeChange);
        battery.addEventListener('dischargingtimechange', onDischargingTimeChange);
        battery.addEventListener('levelchange', onLevelChange);
      });
    }
  • <p>Initial battery status was <b id="charging">unknown</b>, charging time <b id="chargingTime">unknown</b>, discharging time <b id="dischargingTime">unknown</b>, level <b id="level">unknown</b>.</p>
    
    <div id="target"></div>

Resources