Android6.0电池图标外显示电量百分比

众所周知Android6.0进入界面后电池电量百分比被隐藏进了调谐者模式里面,即使打开调谐者模式显示电量数字也在电池图标里,对于某些习惯于5.1电量显示的人来说这是一个很难受的事情,那么这里我来提供一个在Setting-电池里增加一个开关来控制电池电量百分比显示的方法:

效果图如下:
这里写图片描述
开启后:
这里写图片描述
首先在system_icons.xml电池图标边上增加textview:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/lxsbattery"
        android:visibility="gone"/>
然后在Setting的power_usage_summary.xml添加开关控制
<CheckBoxPreference
            android:key="battery_percentage_on"
            android:title="@string/battery_percentage"
            android:persistent="false"/>
接着是处理textview显示电量的逻辑代码,systemUI里BatteryController.java这个类是一个广播,专门用于处理电量相关,可以直接从里面获取实时电量,我们可以在里面添加自定义方法传进控件来显示电量
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryCont
index d1b69ab..876bd3a 100755
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
@@ -27,9 +27,33 @@ import android.util.Log;
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+//by lxs start
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.view.View;
+import android.widget.TextView;
+import android.provider.Settings;
+import android.util.Log;
+import com.android.systemui.R;
+//by lxs end

 public class BatteryController extends BroadcastReceiver {
-    private static final String TAG = "BatteryController";
+       //by lxs start
+    //private static final String TAG = "BatteryController";
+       private static final String TAG = "lxs";
+       private TextView mBatteryPercentageView;
+    private boolean mIsShowPercentage = true;
+    private String mPercentage = "100%";
+       private boolean mShowLowPowerModeIndicator;
+    private Context mContext;
+    private final Handler mHandler = new Handler();
+       public void setPercentageView(TextView v) {
+        mBatteryPercentageView = v;
+          }
+       //by lxs end
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

     private final ArrayList<BatteryStateChangeCallback> mChangeCallbacks = new ArrayList<>();
@@ -40,14 +64,30 @@ public class BatteryController extends BroadcastReceiver {
     private boolean mCharging;
     private boolean mCharged;
     private boolean mPowerSave;
+       //by lxs start
+       private boolean flag;

     public BatteryController(Context context) {
+               //by lxs start
+               mContext = context;
+               //by lxs end
         mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
-
+               ContentObserver obs = new ContentObserver(mHandler) {
+            @Override
+            public void onChange(boolean selfChange) {
+                updateLowPowerModeIndicator();
+            }
+        };
+
+        final ContentResolver resolver = context.getContentResolver();
+        updateLowPowerModeIndicator();
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_BATTERY_CHANGED);
         filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
         filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING);
+               //by lxs start
+               filter.addAction("android.lxs");
+               //by lxs end
         context.registerReceiver(this, filter);

         updatePowerSave();
@@ -85,19 +125,56 @@ public class BatteryController extends BroadcastReceiver {
             mCharging = mCharged || status == BatteryManager.BATTERY_STATUS_CHARGING;

             fireBatteryLevelChanged();
+                       //by lxs start
+                       int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
+            mPercentage = String.valueOf(mLevel * 100 / scale) + "%";
+              Log.d(TAG, "mPercentage000="+mPercentage);
+            refreshBatteryPercentage();
+                       //by lxs end
         } else if (action.equals(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)) {
             updatePowerSave();
         } else if (action.equals(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING)) {
-            setPowerSave(intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false));
+            setPowerSave(intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false)&& mShowLowPowerModeIndicator);
+        }
+               //by lxs start
+               else if (action.equals("android.lxs")) {
+                               flag =intent.getBooleanExtra("flag", false);
+                               android.util.Log.e(TAG,"收到广播"+flag);
+                       if(flag==true){
+ mBatteryPercentageView.setText(mPercentage);
+                               mBatteryPercentageView.setVisibility(View.VISIBLE);
+                               android.util.Log.e(TAG,"收到广播后true");
+                               }else{
+                               mBatteryPercentageView.setVisibility(View.GONE);
+                               android.util.Log.e(TAG,"收到广播后false");
+                       }
+        }
+               //by lxs end
+    }
+               //by lxs start
+               private void updateLowPowerModeIndicator() {
+        final ContentResolver resolver = mContext.getContentResolver();
+        boolean show = true;//Settings.Global.getInt(resolver,
+               // Settings.Global.SHOW_LOW_POWER_MODE_INDICATOR, 1) != 0;
+        if (mShowLowPowerModeIndicator != show) {
+            mShowLowPowerModeIndicator = show;
+            updatePowerSave();
+                       }
+               }
+               private void refreshBatteryPercentage() {
+        if (mBatteryPercentageView == null) {
+            Log.d(TAG, "mBatteryPercentageView == null");
+            return;
         }
+               final ContentResolver resolver = mContext.getContentResolver();
+       int battery=Settings.Global.getInt(resolver,"lxsbattery", 0);
+       if(battery==1){
+           mBatteryPercentageView.setText(mPercentage);    
            +mBatteryPercentageView.setVisibility(View.VISIBLE);
+       }else {
            +mBatteryPercentageView.setVisibility(View.GONE);
+        }
     }
+       //by lxs end

     public boolean isPowerSave() {
         return mPowerSave;
     }

     private void updatePowerSave() {
-        setPowerSave(mPowerManager.isPowerSaveMode());
+        setPowerSave(mPowerManager.isPowerSaveMode()&& mShowLowPowerModeIndicator);
     }

添加的代码逻辑为:在构造方法里初始化我们传进来的textview,这个类可以实时获取到电量而且是一个广播,因此我们可以通过广播来控制是否让传进来的这个textvie显示,自己接受的那个广播是为了实时显示和隐藏,和updateLowPowerModeIndicator()里的判定显示隐藏不冲突,updateLowPowerModeIndicator()里是电量变化一次就执行一次,所以有必要加广播实时控制,接着就是在初始化textview,

diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.j
index 81169ea..be3ce81 100755
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -822,6 +822,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         mLocationController = new LocationControllerImpl(mContext,
                 mHandlerThread.getLooper()); // will post a notification
         mBatteryController = new BatteryController(mContext);
+               //by lxs start
+               mBatteryController.setPercentageView((TextView) mStatusBarWindow.findViewById(R.id.lxsbattery));
+               //by lxs end
         mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() {
             @Override
             public void onPowerSaveChanged() {
还有初始化setting的按键并实现点击功能
diff --git a/packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index a267e24..97c2aeb 100755
--- a/packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -102,7 +102,7 @@ public class PowerUsageSummary extends PowerUsageBase {
         addPreferencesFromResource(R.xml.power_usage_summary);
         /* SPRD: add by Bug 494158, remove battery level percent feature @{ */
         //SPRD:Bug475755  Add battery level percent feature
-        //mBatteryPercentagePref = (CheckBoxPreference) findPreference(KEY_BATTERY_PERCENTAGE);
+        mBatteryPercentagePref = (CheckBoxPreference) findPreference(KEY_BATTERY_PERCENTAGE);
+       int battery=Settings.Global.getInt(getActivity().getContentResolver(),"lxsbattery", 0);
+       if(battery==1){
+           mBatteryPercentagePref.setChecked(true);
+       }else{
+           mBatteryPercentagePref.setChecked(false);
+       }
         /* @} */
         mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_HISTORY);
         mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST);
@@ -151,6 +151,23 @@ public class PowerUsageSummary extends PowerUsageBase {
         }*/
         /* @} */
         /* @} */
+               //by lxs start
+                if (mBatteryPercentagePref == preference) {
+                       android.util.Log.e("lxs","点击了");
+            if(mBatteryPercentagePref.isChecked()){
+                               Intent intent = new Intent("android.lxs");      
+                               intent.putExtra("flag", true);
+                               getActivity().sendBroadcast(intent);
+                               android.util.Log.e("lxs","选中的广播");
+ Settings.Global.putInt(getActivity().getContentResolver(),"lxsbattery",1);
+                       }else{
+                               Intent intent = new Intent("android.lxs");      
+                               intent.putExtra("flag", false);
+                               getActivity().sendBroadcast(intent);
+                               android.util.Log.e("lxs","没选中的广播");
+ Settings.Global.putInt(getActivity().getContentResolver(),"lxsbattery",0);
+                       }
+                       //by lxs end
+            return true;
+        }
         if (!(preference instanceof PowerGaugePreference)) {
             return false;
         }
这样就完成效果了,大家可以试试。
如果需要默认显示电量的话只需要把各个判定条件交换一下位置就好了。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值