android 电池管理之个人理解

来源:互联网 发布:北京折叠 雨果 知乎 编辑:程序博客网 时间:2024/05/09 23:10

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




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


由图可知,最后电池红的的时候还有4的电量,所以没有关机。BatteryService.java中有几种关机检测,电量为零或者温度过高都会直接关机。
其实类比电池的检测,可以猜测比如耳机插拔等操作过程了。


充电动画的实现是一个frameworks/base/core/res/res/drawable/stat_sys_battery_charge.xml上面的xml是一个

根据不同level值进行变化的动画效果(本质换图片)控制是在

frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java中,通过设置battery
的level,stat_sys_battery_charge.xml从而会动态的换取不同动画效果。