java获取电池状态,Android状态栏显示电池状态代码流程分析 | 学步园

BatteryController.java

注册广播接收器,接收Intent.ACTION_BATTERY_CHANGED广播

之后调用BatteryStateChangeCallback cb.onBatteryLevelChanged(level, plugged)来回调刷新状态

其中,BatteryStateChangeCallback只是定义的一个interface:

public interface BatteryStateChangeCallback {

public void onBatteryLevelChanged(int level, boolean pluggedIn);

}

它的具体实在QuickSettingsModel.java中:

// BatteryController callback

@Override

public void onBatteryLevelChanged(int level, boolean pluggedIn) {

mBatteryState.batteryLevel = level;

mBatteryState.pluggedIn = pluggedIn;

mBatteryCallback.refreshView(mBatteryTile, mBatteryState);

}

PS:我们可以看到QuickSettingsModel这个类实现了好几个接口,这些接口都一些回调:

class QuickSettingsModel implements BluetoothStateChangeCallback,

NetworkSignalChangedCallback,

BatteryStateChangeCallback,

BrightnessStateChangeCallback,

RotationLockControllerCallback,

LocationSettingsChangeCallback {

...

}

继续往下看:

private RefreshCallback mBatteryCallback;

这里主要调用了refreshView方法来更新视图,看看它都做了些什么:

public void refreshView(QuickSettingsTileView ignored, State state) {

if (mShowWhenEnabled) {//这是一个开关,用户控制是否设置其可见性

mView.setVisibility(state.enabled ? View.VISIBLE : View.GONE);

}

if (state.iconId != 0) {//更新图标

mView.setImageDrawable(null); // needed to flush any cached IDs

mView.setImageResource(state.iconId);

}

if (state.label != null) {//更新文字

mView.setText(state.label);

}

}

至此,流程结束

如果需要在电池图标上显示当前电量百分比:可能需要修改如下地方:

public void refreshView(QuickSettingsTileView ignored, State state) {

if (mShowWhenEnabled) {

mView.setVisibility(state.enabled ? View.VISIBLE : View.GONE);

}

if (state.iconId != 0) {

mView.setImageDrawable(null); // needed to flush any cached IDs

mView.setImageResource(state.iconId);

}

if (state instanceof BatteryState) {

//如果走到这里说明更新的是电池?上面的iconId 是干啥的还有待进一步研究

Log.d(TAG, "quan #################################################### state.batteryLevel is " + ((BatteryState)state).batteryLevel);

}

else {

Log.d(TAG, "quan #################################################### mBatteryState.batteryLevel is " + mBatteryState.batteryLevel);

}

if (state.label != null) {

mView.setText(state.label);

}

}

另外,

BatteryMeterView.java中有关于状态栏电池初始化的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值