电池Api的用法与应用

什么是电池API?

顾名思义,就是检测电池当前使用状态的API。


电池API的用途?

用途很多,举几个简单的例子:

当用户电池电量低,自动保存应用当前状态,以防不测。

当用户电池电量低,自动降低应用效果,以达到节省用户电量的目的。

当用户正在充电,自动切换到最高性能模式,保证应用的流畅和最大的效果。

等等用途……


哇哦~这么厉害,那我们怎么使用呢????

这个先不急,因为我们首先要面对现实。

这个API的兼容性并不良好,不过却也是W3C的候选推荐标准了(截至2015年10月06日数据),所以前途也是大大的有啊。

以下是目前的兼容性一览:


目前微软浏览器全线不支持(不过看微软对WebGL的态度,说不定这些扩展API突然脑抽被支持了呢)

FireFox全部支持(包括FireFox OS也支持,不过目前来看,API名称似乎和标准有出入,但是功能实现都是一致的)

Chrome全部支持(但目前国内最多的Android4.4版本未支持,微信X5内核支持,请谨慎使用)

很遗憾,IOS并不支持,但是鉴于IOS一向自我管理比较好,所以支不支持这个API倒也不是很特别的事。


好了,看完上图有人欢喜有人忧,但此文还是要继续写下去的,有兴趣的人请继续往下看吧!~


在使用之前我们要做一些操作,用于统一不同浏览器不同的API名称。

    if (typeof navigator.getBattery != "function") {
        navigator.getBattery = function () {
            /// <summary>获取电池管理器</summary>

            return {
                then: function (callback) {
                    var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery || navigator.msBattery;
                    if (battery !== undefined) callback(battery);
                    else {
                        callback({
                            charging: false,
                            percentage: 50,
                            chargingTime: Infinity,
                            dischargingTime: Infinity
                        });
                    }
                }
            }
        };
    }
如果浏览器没有支持标准的navigator.getBattery函数,则我们自己构建一个。

该函数返回一个对象,对象内只有一个then函数。

then函数返回当前电池信息对象。

我们也可以由此得知,浏览器内部获取此信息是异步的。

如果浏览器没有办法帮助我们获取到电池信息对象,则我们返回一个既定默认状态。

但是此状态是无效的,也就是说,这个信息并不是真实状态,只是为了兼容API而已。

因此,这种兼容方法应用不能也不应该完全相信,当成参考值即可。


navigator.getBattery().then函数我们只需要调用一次即可,因为then调用我们回调函数的时候即可理解为电池信息已初始化完成,等待主人尽情虐待我吧!~


那么,既然这个函数只需要调用一次,我们如何实时获取电池信息呢?

或者换一种说法,电池信息有改变的时候我们如何知道呢?

这个时候,我们就该想到要绑定事件了。


Battery API有四个事件可供我们绑定使用,他们的名称及说明如下。

电源拔下\插上时触发

chargingchange

电量增加或减少时触发

levelchange

充满电的时间有改变时触发

chargingtimechange

电量用完所需要的时间有改变时触发

dischargingtimechange


接下来,我们先上一段代码,然后再做解释。

var currentStatus = null;
navigator.getBattery().then(function (battery) {
    function checkChange () {
        currentStatus = battery;
        // 其实这里可以做很多事情,为了简单,我直接把battery对象赋值给currentStatus以便外面可以获取到
    }
    // 初始化后立刻检查更新,避免currentStatus为null
    checkChange();

    // 绑定电源拔下\插上事件
    battery.addEventListener('chargingchange', checkChange);
    // 绑定电量增加或减少时的事件
    battery.addEventListener('levelchange', checkChange);
    // 绑定充满电的时间有更改的事件
    battery.addEventListener('chargingtimechange', checkChange);
    // 绑定电量用完所需要的时间有改变的事件
    battery.addEventListener('dischargingtimechange', checkChange);
});

简单吧,那么在初始化完成后我们可以从currentStatus对象中获取到什么呢?

电源是否插上

charging

充满电剩余时长(若为0则是充满电状态)

chargingTime

放电剩余时长(若为Infinity则是电源已插上,不可能在放电)

dischargingTime

当前电量(值在0.0 ~ 1.0之间)

level


至此,介绍就全部完了。

至于具体怎么用,用来做什么,就是大家的事情了~


十分感谢您浏览我的博客!再见!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值