前端设备电源管理

250 阅读1分钟

新增api navigator.getBattery

电池状态 API 中的 BatteryManager 接口提供了系统电池电量的一些信息。navigator.getBattery() 方法返回一个 promise 对象,该 promise 在完成状态时将返回一个 BatteryManager 接口。

属性

方法

方法继承自其父接口EventTarget

事件

举个栗子

navigator.getBattery().then((battery) => {
  function updateAllBatteryInfo() {
    updateChargeInfo();
    updateLevelInfo();
    updateChargingInfo();
    updateDischargingInfo();
  }
  updateAllBatteryInfo();

  battery.addEventListener("chargingchange", () => {
    updateChargeInfo();
  });
  function updateChargeInfo() {
    console.log(`充电中? ${battery.charging ? "Yes" : "No"}`);
  }

  battery.addEventListener("levelchange", () => {
    updateLevelInfo();
  });
  function updateLevelInfo() {
    console.log(`电量百分比: ${battery.level * 100}%`);
  }

  battery.addEventListener("chargingtimechange", () => {
    updateChargingInfo();
  });
  function updateChargingInfo() {
    console.log(`距离充满还剩: ${battery.chargingTime} s`);
  }

  battery.addEventListener("dischargingtimechange", () => {
    updateDischargingInfo();
  });
  function updateDischargingInfo() {
    console.log(`还能撑: ${battery.dischargingTime} s`);
  }
});

测试后小计

  • dischargingtimechange这个事件在断电后不会立即触发,在电量变化后会触发,但触发时机不确定,断电后电量100%的时候也会触发,level一直为1。
  • 断电中,chargingTime值为infinite
  • 插电中,dischargingtimechange值为infinite

支持性

image.png

「Safari」和「Firefox」完全不支持。

「Chrome」和「Opera」基本完美支持(14年底后的版本都支持)

「Edge」20年后的版本支持。

这个支持性,基本和大多数业务场景无缘了。套壳app上可以用。场景略微有点窄。