android11 开机重启后状态栏获取不到电量
状态栏电量不显示处理
·
问题:开机重启后,无法获取具体电量值。
分析:基本上应用层电量的获取都是依靠电量广播Intent.ACTION_BATTERY_CHANGED来获取,当开机时,batteryservice.java会获取底层上传的电量信息并发送广播,但此时状态栏的电量百分比java类并未实例化没有及时获取到对应电量信息,当完成实例化进行展示,电量level为0故不展示。
对应的类流程:frameworks/base/services/core/java/com/android/server/BatteryService.java ->
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java ->frameworks/base/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
解决:可以在BatteryControllerImpl.java中对BatteryMeterView.java注册时进行处理,当BatteryMeterView.java实例化注册callback时,主动获取电量并调用onBatteryLevelChanged方法
代码:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
@Override
public void addCallback(BatteryController.BatteryStateChangeCallback cb) {
synchronized (mChangeCallbacks) {
mChangeCallbacks.add(cb);
}
if(cb instanceof BatteryMeterView && !mHasReceivedBattery){
Intent intent = mContext.registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
if(intent != null){
firstSetBatteryUI(intent,cb);
}
}
if (!mHasReceivedBattery) return;
// Make sure new callbacks get the correct initial state
cb.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
cb.onPowerSaveChanged(mPowerSave);
cb.onBatteryUnknownStateChanged(mStateUnknown);
}
public void firstSetBatteryUI(Intent intent,BatteryController.BatteryStateChangeCallback cb){
int mLevel = (int)(100f
* intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
/ intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
boolean mPluggedIn = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
final int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
BatteryManager.BATTERY_STATUS_UNKNOWN);
boolean mCharged = status == BatteryManager.BATTERY_STATUS_FULL;
mCharging = mCharged || status == BatteryManager.BATTERY_STATUS_CHARGING;
boolean mWirelessCharging = mCharging && intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)
== BatteryManager.BATTERY_PLUGGED_WIRELESS;
boolean present = intent.getBooleanExtra(EXTRA_PRESENT, true);
boolean unknown = !present;
cb.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging);
cb.onPowerSaveChanged(mPowerSave);
cb.onBatteryUnknownStateChanged(unknown);
}
更多推荐
所有评论(0)