测试APK,获取电量信息,做一些耗电相关的测试,必须要用到一段时间内的耗电百分比,和当前手机的电池容量,计算出平均的耗电电流
1. 获取电池电量百分比
可以使用BatteryManager,废话不多说上代码:
BatteryManager manager = (BatteryManager)context.getSystemService(context.BATTERY_SERVICE);
int currentLevel = manager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
2. 获取电池容量
查了好久,没有找到直接获取的方式,获取电池容量可以通过java反射 PowerProfile类获取(PowerProfile.java,实际是读取power_profile.xml读取,xml中保存了当前机型的场景下的耗电系数或这一些固定的值 比如: 每个CPU频点的耗电系数 子系统的耗电系数、总电量等信息)
Object mPowerProfile;
double batteryCapacity =0; //电池的容量mAh
final String POWER_PROFILE_CLASS ="com.android.internal.os.PowerProfile";
try {
mPowerProfile = Class.forName(POWER_PROFILE_CLASS).getConstructor(Context.class).newInstance(context);
batteryCapacity = (double) Class.forName(POWER_PROFILE_CLASS).getMethod("getBatteryCapacity").invoke(mPowerProfile);
}catch (Exception e) {
printLog("get batteryCapacity mAh error: " + batteryCapacity);
e.printStackTrace();
}
引申:
获取power_profile.xml文件,
1. 没有办法直接获取
2. 通过拿到手机中framework-res.apk(APK路径 /system/framework/)然后反编译APK
3.反编译后存在于res/xml/power_profile.xml(Android工程中存放的路径)
对应的power_profile.xml
3120 整个是电池容量
CPU 小核的所有频点
300000
576000
748000
998400
1209600
1324800
1516800
1612800
1780000
CPU小核对应每个频点满负荷的功耗
31.84
35.91
37.69
45.77
53.89
59.62
66.80
72.52
80.99
系统常用的一些场景的耗电量,列出来几个
64.19
9.22
132.43