dumpsys battery 简介
一. dump 代码位置
frameworks/base/services/core/java/com/android/server/BatteryService.java
public void onStart() {
...
mBinderService = new BinderService();
publishBinderService("battery", mBinderService);
...
}
private final class BinderService extends Binder {
@Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;if (args.length > 0 && "--proto".equals(args[0])) {
dumpProto(fd);
} else {
dumpInternal(fd, pw, args);
}
}@Override public void onShellCommand(FileDescriptor in, FileDescriptor out,
FileDescriptor err, String[] args, ShellCallback callback,
ResultReceiver resultReceiver) {
(new Shell()).exec(this, in, out, err, args, callback, resultReceiver);
}
}
private void dumpInternal(FileDescriptor fd, PrintWriter pw, String[] args) {
synchronized (mLock) {
if (args == null || args.length == 0 || "-a".equals(args[0])) {
pw.println("Current Battery Service state:");
if (mUpdatesStopped) {
pw.println(" (UPDATES STOPPED -- use 'reset' to restart)");
}
pw.println(" AC powered: " + mHealthInfo.chargerAcOnline);
pw.println(" USB powered: " + mHealthInfo.chargerUsbOnline);
pw.println(" Wireless powered: " + mHealthInfo.chargerWirelessOnline);
pw.println(" Dock powered: " + mHealthInfo.chargerDockOnline);
pw.println(" Max charging current: " + mHealthInfo.maxChargingCurrentMicroamps);
pw.println(" Max charging voltage: " + mHealthInfo.maxChargingVoltageMicrovolts);
pw.println(" Charge counter: " + mHealthInfo.batteryChargeCounterUah);
pw.println(" status: " + mHealthInfo.batteryStatus);
pw.println(" health: " + mHealthInfo.batteryHealth);
pw.println(" present: " + mHealthInfo.batteryPresent);
pw.println(" level: " + mHealthInfo.batteryLevel);
pw.println(" scale: " + BATTERY_SCALE);
pw.println(" voltage: " + mHealthInfo.batteryVoltageMillivolts);
pw.println(" temperature: " + mHealthInfo.batteryTemperatureTenthsCelsius);
pw.println(" technology: " + mHealthInfo.batteryTechnology);
pw.println(" Charging state: " + mHealthInfo.chargingState);
pw.println(" Charging policy: " + mHealthInfo.chargingPolicy);
} else {
Shell shell = new Shell();
shell.exec(mBinderService, null, fd, null, args, null, new ResultReceiver(null));
}
}
}
二. dump 内容解析
Current Battery Service state:
//
Ac
: 交流电,墙上的插头充电器,通常支持更高的功率(快充)。// false: 表示不是快充.
//代码:mHealthInfo.chargerAcOnline
AC powered: false
//设备是否正在通过 USB 电源充电,true 表示是.
//代码:mHealthInfo.chargerUsbOnline
USB powered: true//设备是否进行无线充电,false: 表示没有无线充电.
//代码:mHealthInfo.chargerWirelessOnline
Wireless powered: false//设备是否底座充电 ,false:表示没有底座充电
//代码:mHealthInfo.chargerDockOnline
Dock powered: false//最大充电电流:500000 μA
//代码:mHealthInfo.maxChargingCurrentMicroamps
Max charging current: 500000//最大充电电压:5000000 μV
//代码:mHealthInfo.maxChargingVoltageMicrovolts
Max charging voltage: 5000000//电荷计数器:4017000 μAh
//代码:mHealthInfo.batteryChargeCounterUah
Charge counter: 4017000//电池状态:充满。
//常见状态代码:
//2 =BATTERY_STATUS_FULL
(已充满)
//3 = 放电中
//5 = 充电中//代码:mHealthInfo.batteryStatus
status: 2//电池健康状态:良好。
//常见健康代码:
//2 =BATTERY_HEALTH_GOOD
(良好)//代码:mHealthInfo.batteryHealth
//健康度:2
health: 2//检测到电池存在
//代码:mHealthInfo.batteryPresent
present: true//当前电池剩余电量为 100%。
//代码:mHealthInfo.batteryLevel
level: 100//电量百分比的最大值为 100(这是标准值)。
//代码:BATTERY_SCALE
//private static final int BATTERY_SCALE = 100; // battery capacity is a percentage
scale: 100//代码:mHealthInfo.batteryVoltageMillivolts
//电压:4364 mV
voltage: 4364//电池当前温度为 27.0°C
//代码:mHealthInfo.batteryTemperatureTenthsCelsius
temperature: 270//电池类型为锂离子电池。
//代码:mHealthInfo.batteryTechnology
technology: Li-ion//充电状态:0
//当前未在充电(因为电池已满,停止充电)。
这个字段是硬件层面的状态,与 status 字段相关联。因为已充满,所以充电回路已断开。//代码: mHealthInfo.chargingState
Charging state: 0//充电策略:0
//充电策略:自适应。
//通常 0 表示系统自适应的常规充电模式(与 1 的“强制慢充”等模式相对)。//代码:mHealthInfo.chargingPolicy
Charging policy: 0