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 preferenceScreen
       		 Preference preference) {
     // add by wxd for battery percentage
     if (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() {
          @Override
          public void onPowerSaveChanged() {   // 省电模式变化
             mHandler.post(mCheckBarModes);
             if (mDozeServiceHost != null) {
                 mDozeServiceHost.firePowerSaveChanged(mBatteryController.isPowerSave());
             }
          }
          
          @Override
          public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {    // 电量变化回调
                // add start
             percentage = 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 percentage
   private 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() {
   		 @Override
         public 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值