上QQ阅读APP看书,第一时间看更新
4.3 使用被动消息事件
本节将继续介绍Cordova中的另一类事件:被动消息事件。这类事件有一个共同的特点是非常难以调试。如果想要对batterycritical事件进行测试,可能就只有等到电量下降到某个程度才可以得到结果,尤其是这些数据还无法利用虚拟机进行模拟。另外,这类事件在使用上往往还比较鸡肋,比如开发者对电量事件的使用不外乎当电量低到一定程度时提醒用户充电,可是实际上安卓系统本身也会做同样的事情。因此开发者会尽量不使用这类事件。
虽然会避免使用它们,但是该介绍的知识点一个也不能少,这就让笔者突然想起了一句古话叫做“敬鬼神而远之”。可能开发者在面对不少“不好用”的API时都是这样的态度吧。下面回到正题,请看范例4-3中的例子。
【范例4-3】被动消息事件的使用。
01 <! DOCTYPE html> 02 <html> 03 <head> 04 <meta charset="utf-8"> 05 <title>被动消息事件的使用</title> 06 <! --引入Cordova脚本文件--> 07 <script src="cordova.js" type="text/javascript"></script> 08 <script> 09 // 声明当设备加载完毕时的回调函数onDevieReay 10 document.addEventListener("deviceready", onDeviceReady, false); 11 // 当设备加载完毕后就会执行该函数 12 function onDeviceReady() { 13 // 声明用于online事件的触发器函数 14 document.addEventListener("online", onOnline, false); 15 // 声明用于offline事件的触发器函数 16 document.addEventListener("offline", onOffline, false); 17 // 声明用于batterycritical事件的触发器函数 18 window.addEventListener("batterycritical", onBatterycritical, false); 19 // 声明用于batterylow事件的触发器函数 20 window.addEventListener("batterylow", onBatterylow, false); 21 // 声明用于batterystatus事件的触发器函数 22 window.addEventListener("batterystatus", onBatterystatus, false); 23 } 24 // 当网络状态由断开切换到连接状态时触发此函数 25 function onOnline() { 26 alert("网络连接成功!"); 27 } 28 // 当网络状态从连接切换到断开状态时触发此函数 29 function onOffline () { 30 alert("网络断开!"); 31 } 32 // 处理电池电量不足的事件 33 function onBatterycritical (info) { 34 alert("电量过低,还剩:" + info.level + "%"); 35 } 36 // 电池电量过低触发此函数 37 function onBatterylow (info) { 38 alert("电量过低,还剩: " + info.level + "%"); 39 } 40 // 电池状态发生改变触发此函数 41 function onBatterystatus (info) { 42 alert("电池状态改变了,剩余电量:" + info.level + "%"); 43 } 44 </script> 45 </head> 46 <body> 47 <h1>被动消息事件的使用</h1> 48 </body> 49 </html>
运行之后的结果如图4-10所示。
图4-10 电池状态改变时弹出对话框
有的读者也许会非常佩服笔者的敬业,可以为了找一张书中实用的图片而静等电量变化,这里要介绍一个独家窍门,那就是可以人为地创造batterystatus事件。比如拿着手机,启动范例程序,把手机充电器插上去,电量状态就改变了,再拔下来又改变一次。
这一组事件的使用方法与之前介绍的一样,但是在电池事件的回调函数中加入了参数,这里使用的info对象(如第41行所示)封装了相关电量的一些信息。它包含了两个属性,分别是level(用于记录当前电量的百分值,取值范围为从0~100)和isPlugged(用于记录当前是否为充电状态)。
由于这类事件非常难以捕捉,在测试时可以将具体的函数操作写在batterystatus事件的回调函数中进行测试,测试完成后再移回到它该待的地方就可以了。