SystemUI状态栏添加电量百分比显示

OS: MTK 6.0

1.添加一个控制显示的开关
  • 源码路径:/packages/apps/Settings/src/com/mediatek/settings/fuelgauge/PowerUsageExts.java
    在setting中电量设置项新增一项
  public void initPowerUsageExtItems() {...// add  for battery percentage   mBatteryPercentPrf = new SwitchPreference(mContext);mBatteryPercentPrf.setKey(KEY_BATTERY_PERCENTAGE_ENABLE);mBatteryPercentPrf.setTitle(R.string.battery_percentage_title);mBatteryPercentPrf.setOrder(PREFERENCE_ORDER_FIRST);mBatteryPercentPrf.setChecked(true);mPowerUsageScreen.addPreference(mBatteryPercentPrf);//add end}public boolean onPowerUsageExtItemsClick(PreferenceScreen preferenceScreenPreference preference) {// add by wxd for battery percentageif (KEY_BATTERY_PERCENTAGE_ENABLE.equals(preference.getKey())) {if (preference instanceof SwitchPreference) {SwitchPreference pref = (SwitchPreference) preference;int bgState = pref.isChecked() ? 1 : 0;Log.d(TAG, "battery percentage enable state: " + bgState);Settings.System.putInt(mContext.getContentResolver(),"BATTERY_PERCENTAGE_ENABLE", bgState);Intent intent = new Intent(ACTION_BATTERY_PERCENTAGE_ENABLE);mContext.sendBroadcast(intent);     // 状态发生变化发送广播,显示或隐藏电量百分比if (mBatteryPercentPrf != null) {mBatteryPercentPrf.setChecked(pref.isChecked());}       }return true;}//add end 		 
2.添加电量显示的textview
  • 源码路径:/frameworks/base/packages/SystemUI/res/layout/status_bar.xml
 <include layout="@layout/system_icons" /><TextView android:id="@+id/battery_level"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:paddingEnd="@dimen/battery_level_padding_end"android:textColor="#ffffff"android:visibility="gone"android:textSize="@dimen/battery_level_text_size"android:importantForAccessibility="noHideDescendants"/>
3.电量显示
  • 源码路径:/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
    PhoneStatusBar中有个电量变化的监听回调
  protected PhoneStatusBarView makeStatusBarView() {...battery_level_tv = (TextView)mStatusBarView.findViewById(R.id.battery_level);  // add...mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() {@Overridepublic void onPowerSaveChanged() {   // 省电模式变化mHandler.post(mCheckBarModes);if (mDozeServiceHost != null) {mDozeServiceHost.firePowerSaveChanged(mBatteryController.isPowerSave());}}@Overridepublic void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {    // 电量变化回调// add startpercentage = NumberFormat.getPercentInstance().format((double) level / 100.0);isBatteryPercentage = Settings.System.getInt(mContext.getContentResolver(),"BATTERY_PERCENTAGE_ENABLE", 1) != 0;refreshBatteryPercentage();// add end}});	 ...// add 注册电量显示开关使能广播IntentFilter batteryPercentfilter = new IntentFilter();batteryPercentfilter.addAction(ACTION_BATTERY_PERCENTAGE_ENABLE);context.registerReceiver(mBatteryPercentReceiver, batteryPercentfilter);//add end    ...}// add for battery percentageprivate void refreshBatteryPercentage(){if (isBatteryPercentage) {battery_level_tv.setText(percentage);battery_level_tv.setVisibility(View.VISIBLE);} else {battery_level_tv.setVisibility(View.GONE);}}private TextView battery_level_tv;private String percentage;private boolean isBatteryPercentage = false;private static final String ACTION_BATTERY_PERCENTAGE_ENABLE = "action_battery_percentage_enable";private BroadcastReceiver mBatteryPercentReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (ACTION_BATTERY_PERCENTAGE_ENABLE.equals(action)) {if (battery_level_tv == null) {battery_level_tv = (TextView)mStatusBarView.findViewById(R.id.battery_level);} isBatteryPercentage = Settings.System.getInt(mContext.getContentResolver(),"BATTERY_PERCENTAGE_ENABLE", 1) != 0;refreshBatteryPercentage();}}};// add end

其实,上面的mBatteryController是一个广播,监听电量变化的广播Intent.ACTION_BATTERY_CHANGED

  • 源码路径:/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部