使用 Battery API – WebAPI 部分

检测设备或电脑的电量水平可以帮助您告知用户当前状态。在 Mozilla 的 WebAPI 中,我们提供了 Battery API 来实现这种可能性。

访问电池

首先,需要访问电池对象

var battery = navigator.mozBattery;

属性

提供了一些属性来检测设备中电池的充电水平

电池电量
检查当前电池电量。返回 0 到 1 之间的值。
电池充电状态
一个布尔值,表示设备/电脑当前是否正在充电。
电池充电时间
以秒为单位计算,直到充满电所需的时间。充电时可用。
电池放电时间
以秒为单位计算,直到放电所需的时间。未充电时可用。

// 获取电池电量百分比
var batteryLevel = battery.level * 100 + "%";

// 获取设备是否正在充电
var chargingStatus = battery.charging;

// 设备充满电所需的时间
var batteryCharged = battery.chargingTime;

// 设备放电所需的时间
var batteryDischarged = battery.dischargingTime;

事件

有四个事件可用于检测电池状态的变化

levelchange
如果电池电量发生变化。
chargingchange
检测设备是否从充电状态变为未连接状态,反之亦然。
chargingtimechange
当设备的充电时间发生变化时(连接电源时)
dischargingtimechange
当设备的放电时间发生变化时(断开电源时)
battery.addEventLister("levelchange", function () {
    // Device's battery level changed
}, false);

battery.addEventListener("chargingchange", function () {
    // Device got plugged in to power, or unplugged
}, false);


battery.addEventListener("chargingtimechange", function () {
    // Device's charging time changed
}, false);

battery.addEventListener("dischargingtimechange", function () {
    // Device's discharging time changed
}, false);

设备支持

Battery API 在以下版本中受支持 Firefox Beta

  • Android(目前仅限 Firefox Aurora
  • Windows
  • Linux(对于安装了 UPower 的发行版 - 现在大多数发行版都捆绑了)

目前我们还没有人在开发 Mac OS X 的实现,所以如果你有这方面的技能,我们很乐意看到你的贡献

演示和代码

我制作了一个基本的 Battery API 演示,代码也位于 GitHub 上的 Battery API 代码库 中。

如果您的设备上没有获得预期的结果,请 提交错误报告,我们会进行调查。此功能目前处于实验阶段,可能尚未准备好用于生产环境。

更新:2012 年 9 月 26 日

自发布此文章以来,此 API 现已取消前缀,并且已添加了 Mac OS X 的支持。

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道师和编辑。发表演讲并撰写有关 HTML5、JavaScript 和开放网络的博客文章。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还在 http://robertnyman.com 上定期撰写博客文章,并且热爱旅行和结识新朋友。

更多 Robert Nyman [荣誉编辑] 的文章…


16 条评论

  1. Gervase Markham

    如果 API 能够以某种方式指示测量的准确度,那就太好了。例如,如果我调用 battery.dischargingTime() 并得到“1356”,这是否意味着它一定会在此确切的秒数后关闭?如果不是,最可能的范围是多少?我该如何显示该数字,而不会出现不必要的精确度?

    2012 年 2 月 7 日 07:14

    1. Robert Nyman

      这是一个有趣的想法,尽管我认为这很有挑战性。这完全取决于您使用的应用程序、屏幕亮度等。因此,虽然在调用 Battery API 时的值可能非常准确,但它与用户之后的操作密切相关。

      2012 年 2 月 8 日 01:11

  2. David Mulder

    对于大多数我想到的其他 API,我都能想到各种无需太多麻烦即可利用它们的方法,但是此 API 在什么情况下/何时有用。我唯一能想到的就是在移动设备通电 + 时间时运行更新,但我看不出网站知道我剩余的电量 /有多少/ 的意义。或者您是否期望 Web 应用程序会利用此功能,在电池电量不足时不进行大量计算?

    2012 年 2 月 8 日 01:21

    1. Robert Nyman

      就像您在最后所说的那样。它可以用来根据电池电量提供不同的体验 - 例如游戏,如果设备可能在中途出现故障,则避免发送/检索大量数据,也许是一个小部件面板等等。

      2012 年 2 月 8 日 01:42

    2. Scott Mattocks

      我第一次想到使用这个与休闲游戏有关。如果我正在开发一个时长 5 分钟的消除类游戏(如宝石迷阵),我可能会使用 Battery API 来防止用户在他们很可能无法完成游戏的情况下开始游戏。或者换句话说(可能更好),我可能会使用电池以不同的频率发送分数更新,具体取决于用户电池的预期寿命。如果他们正在充电,我可能只在游戏结束时发送分数。如果他们的剩余时间很少,我可能希望每 30 秒左右发送一次更新。

      2012 年 2 月 8 日 14:23

      1. Robert Nyman

        是的,这是一个很好的例子!这是一个 API - 现在开发人员需要找到我们甚至没有想到的各种用例。:-)

        2012 年 2 月 8 日 14:45

  3. louisremi

    我希望 API 不仅仅是只读的,还能让我们更改电池电量。在规范的未来版本中是否可以设想?
    我讨厌目前需要电源插座和充电器才能增加电量。

    2012 年 2 月 8 日 04:30

    1. Robert Nyman

      很难说,真的 - 不确定未来的功能。

      2012 年 2 月 8 日 14:46

  4. Pierre

    有没有办法检查设备是否真的有电池?
    目前,如果电池充满电(battery.level = 1 且 battery.charging = true)以及如果设备没有电池(至少在我的 Linux 笔记本电脑上),结果都是一样的。
    我现在还没有看到任何用途,但仍然很好知道。

    2012 年 2 月 9 日 08:59

    1. Robert Nyman

      不,如果无法访问电池,则这些是默认值。
      对此有不同的看法,如果您有其他想法,请 提交错误报告 并表达您的想法。谢谢!

      2012 年 2 月 9 日 10:11

  5. Tim McCormack

    我不能说我真的很喜欢将此信息提供给任意网页。

    2012 年 9 月 6 日 13:05

    1. Robert Nyman

      我能理解。当涉及到访问更敏感的信息、在您的计算机上存储内容等时,通常会有用户确认对话框。

      我相信这不被视为如此敏感的信息。

      2012 年 9 月 7 日 00:15

  6. Reuben Morais

    嗨,Robert!从 2 月份开始,我们取消了此 API 的前缀,我刚刚为其实现了 OS X 支持,因此您可能需要更新文章 :)

    2012 年 9 月 25 日 07:28

    1. Robert Nyman

      谢谢!已更新博客文章并添加了注释!

      2012 年 9 月 26 日 00:59

  7. Patrick Stadler

    我刚刚发布了一个 Battery Status API 的小型包装器。它可以在此处获得:https://github.com/pstadler/battery.js

    2012 年 11 月 12 日 00:52

    1. Robert Nyman

      不错,谢谢!

      2012 年 11 月 12 日 06:01

本文评论已关闭。