标签:
电量剩余使用时间值的计算和电量充满时间计算非常类似。
Settings中获取时间值的接口如下:
packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryInfo.java
long prediction = discharging
? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0;
计算方法为BatteryStatsImpl的computeBatteryTimeRemaining()方法,该方法如下:
public long computeBatteryTimeRemaining(long curTime) {
//如果mOnBattery为false,说明连接有充电器,因此不会计算直接返回
if (!mOnBattery) {
return -1;
}
//如果放电步数记录器中没有放电持续步数,说明当前还没有进行放电,返回
if (mDischargeStepTracker.mNumStepDurations < 1) {
return -1;
}
//获取每放一格电时所需的时间平均值
long msPerLevel = mDischargeStepTracker.computeTimePerLevel();
if (msPerLevel <= 0) {
return -1;
}
//电量剩余使用时间 = 放一格电时所需的时间平均值 × 当前电量
return (msPerLevel * mCurrentBatteryLevel) * 1000;
}
这个方法中,使用mDischargeStepTracker来记录没放一格电所持续的时间和所有放电步数,然后通过computeTimePerLevel()得到一个放一格电所需时间的平均值,最后采用如下公式完成计算:
电量剩余使用时间 = 放一格电时所需的时间平均值 × 当前电量。
mDischargeStepTracker和mChargeStepTracker一样,也是LevelStepTracker类的一个实例,用于记录放电时的持续时间、放电步数之和等,其记录流程和mChargeStepTracker记录流程一样,因此就不再详细说明了。详细分析在Battery系列(四) 电量还需多长时间充满时间计算中。
标签:
来源: https://blog.csdn.net/FightFightFight/article/details/82628707