Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514962
  • 博文数量: 107
  • 博客积分: 927
  • 博客等级: 大尉
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-13 17:50
文章分类

全部博文(107)

文章存档

2014年(2)

2013年(13)

2012年(16)

2011年(76)

分类: Java

2011-11-15 15:42:32

里面有一部分关于电池电量动态变化的回答。
电池最开始的检测代码实在frameworks/base/services/java/com/android/server /BatteryService.java中,这里使用的是android中switch机制。监视的位置是(adb shell)/sys/class/power_supply,里面看各家自己的驱动是怎么实现的,具体就是一些状态值,比如电源在不在,电池电量,电池 温度等。里面的数值一旦有变化,就会通知BatteryService.java去读,BatteryService.java中有一个native方法
QQ拼音截图未命名2.png


通过jni去读取这些状态值,并在jni直接对BatteryService.java的一些属性(电源在不在,电池电量,电池温度等)赋 值,BatteryService.java根据这些值做相应的操作,会有intent发出,接收的地方根据这些intent中所附带的值进行系统图标的 变化。比如,
电源在,代表充电,根据电量选择不同的动画,满电了,就停止动画。
电源不在,就是耗电过程,根据电量去显示不同的图片(只有四五张图片吧,是每掉多少电后才换一张图,如下图)。
QQ拼音截图未命名3.png

由图可知,最后电池红的的时候还有4的电量,所以没有关机。BatteryService.java中有几种关机检测,电量为零或者温度过高都会直接关机。
其实类比电池的检测,可以猜测比如耳机插拔等操作过程了。
阅读(1111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~