什么是电池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
至此,介绍就全部完了。
至于具体怎么用,用来做什么,就是大家的事情了~
十分感谢您浏览我的博客!再见!~