BatteryService.java
1. 定义及初始化
private Led mLed; //定义
public BatteryService(Context context) {
super(context);
mContext = context;
mHandler = new Handler(true /*async*/);
mLed = new Led(context, getLocalService(LightsManager.class)); //获取led灯
2. 电量变化时,更新灯的状态
private void update(BatteryProperties props) {
synchronized (mLock) {
if (!mUpdatesStopped) {
mBatteryProps = props;
// Process the new values.
processValuesLocked(false);
} else {
mLastBatteryProps.set(props);
}
}
}
private void processValuesLocked(boolean force) {
...
...
// We are doing this after sending the above broadcasts, so anything processing
// them will get the new sequence number at that point. (See for example how testing
// of JobScheduler's BatteryController works.)
sendIntentLocked(); //发送电量的信息
// Update the battery LED
mLed.updateLightsLocked(); //刷新灯的状态
3. 刷新灯的状态
private final class Led { //内部类
private final Light mBatteryLight;
private final int mBatteryLowARGB;
private final int mBatteryMediumARGB;
private final int mBatteryFullARGB;
private final int mBatteryLedOn;
private final int mBatteryLedOff;
public Led(Context context, LightsManager lights) { //初始化灯的属性
mBatteryLight = lights.getLight(LightsManager.LIGHT_ID_BATTERY); //从LightsManager拿到电池灯
mBatteryLowARGB = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryLowARGB);
mBatteryMediumARGB = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryMediumARGB);
mBatteryFullARGB = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryFullARGB);
mBatteryLedOn = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryLedOn);
mBatteryLedOff = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryLedOff);
}
/**
* Synchronize on BatteryService.
*/
public void updateLightsLocked() {
final int level = mBatteryProps.batteryLevel; //电量百分比,50%就为50
final int status = mBatteryProps.batteryStatus;
if (level < mLowBatteryWarningLevel) { //低电量时,mLowBatteryWarningLevel默认为15
if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
// Solid red when battery is charging
mBatteryLight.setColor(mBatteryLowARGB); //充电时,常亮
} else {
// Flash red when battery is low and not charging
mBatteryLight.setFlashing(mBatteryLowARGB, Light.LIGHT_FLASH_TIMED,
mBatteryLedOn, mBatteryLedOff); //未充电,闪烁
}
} else if (status == BatteryManager.BATTERY_STATUS_CHARGING
|| status == BatteryManager.BATTERY_STATUS_FULL) { //非低电量且正在充电
if (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90) {
// Solid green when full or charging and nearly full
mBatteryLight.setColor(mBatteryFullARGB); //充电满了或电量大于90%,常亮某个颜色
} else {
// Solid orange when charging and halfway full
mBatteryLight.setColor(mBatteryMediumARGB); //未充满时,常亮某个颜色
}
} else {
// No lights if not charging and not low
mBatteryLight.turnOff(); //其他状态,关闭led
}
}
}