在开发过程中有时我们不可避免地需要了解当前设备电池的状态,比如当前剩余电量、电池温度、是否在充电中等等..
经过查询一些资料,我发现电池的信息大多是通过广播获取的,详细的代码不贴了,到处都是,大致的流程是注册一个广播,过滤设为 Intent.ACTION_BATTERY_CHANGED 在其中的onReceive方法中,我们通过系统给的Intent参数,调用getIntExtra可以获得大部分电池信息。
不过今天遇到一个问题,如何获取到设备电池的总容量,注意!,在广播中,通过Intent我们通过“scale”键可以获得一个值,这个值通常是100,并不是我们所要的电池容量,考究了一番,网上关于电池容量的一些信息还是比较少的。下面我们的工作就是 get it。
首先明确,电池的信息是厂商直接提供的,并不是通过硬件检测而来的,其实道理很简单,我们无法通过电池的金属头直接探测电池的容量,最多也就是个电压和温度信息,这些能够探测的信息在上面说的广播的方法中也可以获得。那如何获得电池容量呢?设备在写入操作系统时,厂家会在操作系统中附带一个关于电池、各部件耗电情况的表单,表单名叫 power_profile.xml,路径是com.android.internal.R.xml.power_profile,我们的任务就是从这个表单中读取信息。这时有人可能会问了,我换块电池怎么办,那么,没办法,我们能得到的只是原装电池。。。。(貌似现在的Android机能换电池的并不多ÿ