电量显示,显示充电但是电量不涨

钱晴岚

移动设备的份额在网络流量中在大量增长,其所贡献的网络流量非常庞大,以至于为了移动设备,我们单独创建了一些API和设计理念。

一个非常典型的例子是 W3C电池状态API,它允许一个应用程序获知设备的电池状态信息。

这篇文章探索了这个新的API,为你展示了如何把它整合进你现有的应用程序。

  检测设备是否支持  目前电池API依旧没有得到主流支持。

因此,在使用这个API前需要确认当前设备是否支持此API。

下面展示的函数返回一个布恩值(True/False),指示当前浏览器是否支持电池状态API。

  该函数首先检测了 navigator.battery 对象是否存在。

如果不存在,继续检测 Mozilla 专用的  navigator.mozBattery是否存在。

我曾经见过有些代码还检测了 webkitBattery对象,但是我无法证实其在Chrome中是否存在。

  参考文档:https://developer.mozilla.org/en-US/docs/DOM/window.navigator.battery  XML/HTML Code复制内容到剪贴板  functionisBatteryStatusSupported() {  return!!(navigator.battery || navigator.mozBattery);  }  检查电池  如果电池对象存在,它会包含下列四个只读属性。

  charging (布恩值)指示系统的电池当前是否正在充电。

  如果系统不存在电池,或无法确定电池是否在充电,返回值是 True  chargingTime (数值)电池完全充满电量所需的时间(单位:秒)  当电池完全被充满电时,或者系统不存在电池时,这个值为0。

  如果系统不在充电,或者无法确定完全充满电所需时间,这个值为(无穷大)。

  dischargingTime 和chargingTime相似,(数值)到电池完全放电直到系统休眠剩余的时间(单位:秒)  如果放电时间无法确定,或 系统没有电池 或 系统正在充电,这个值为 (无穷大)  level (数值) 设备当前电量等级。

取值在(0 ~ 1.0)区间,与剩余电量百分比对应。

  1.0表示电池完全充满电,或者不存在电池,或者数值无法确定。

  检测电池事件  上述所有属性都与一个电池事件绑定。

这些事件用来指示电池状态的变化。

比如,插入电源会使charging属性从false变为true。

全部四种电池事件如下所列:  chargingchange 这个类型的事件会在charging属性改变时触发。

这个事件可以被 onchargingchange()事件处理器捕获和处理。

  chargingtimechange 这个类型的事件会在chargingtime属性改变时触发。

这个事件可以被 onchargingtimechange()事件处理器捕获和处理。

  dischargingtimechange 这个类型的事件会在dischargingTime属性改变时触发。

这个事件可以被 ondischargingtimechange()事件处理器捕获和处理。

  levelchange 这个类型的事件会在level属性改变时触发。

这个事件可以被 onlevelchange()事件处理器捕获和处理。

  示例页面  下面的代码展示了如何使用 电池状态API 的属性和事件。

  示例页面显示了API的各个属性值,并且在事件触发时更新它们的值。

  点击此处访问在线示例。

XML/HTML Code复制内容到剪贴板

  1. !DOCTYPE html htmllanghtmllang=en
  2. head titleThe Battery Status API - Example/title
  3. metacharsetmetacharset=UTF-8/ script
  4. window.addEventListener(load, function() { var battery = navigator.battery || navigator.mozBattery;
  5. function displayBatteryStats() { document.getElementById(charging).textContent = (battery.charging) ? charging : not charging;
  6. document.getElementById(chargingtime).textContent = battery.chargingTime; document.getElementById(dischargingtime).textContent = battery.dischargingTime;
  7. document.getElementById(level).textContent = battery.level * 100; }
  8. if (battery) { displayBatteryStats();
  9. battery.addEventListener(chargingchange, displayBatteryStats, false); battery.addEventListener(chargingtimechange, displayBatteryStats, false);
  10. battery.addEventListener(dischargingtimechange, displayBatteryStats, false); battery.addEventListener(levelchange, displayBatteryStats, false);
  11. } else { document.getElementById(stats).textContent = Sorry, your browser does not support the Battery Status API;
  12. } }, false);
  13. /script /head
  14. body dividdivid=stats
  15. Your battery is currently spanidspanid=charging/span.br/ Your battery will be charged in spanidspanid=chargingtime/span seconds.br/
  16. Your battery will be discharged in spanidspanid=dischargingtime/span seconds.br/ Your battery level is spanidspanid=level/span%.
  17. /div /body
  18. /html
  结论  本文为Battery Status API给出了一个完整的总结和展示,尽管其仍未得到主流支持,但是这只是时间问题。

考虑到移动互联网的激增,开发者应该尽快将电池信息纳入设计范畴内。