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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值