众所周知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 endpublic 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 endprivate 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 endmPowerManager = (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 endcontext.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 endpublic 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 notificationmBatteryController = new BatteryController(mContext);
+               //by lxs start
+               mBatteryController.setPercentageView((TextView) mStatusBarWindow.findViewById(R.id.lxsbattery));
+               //by lxs endmBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() {@Overridepublic 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;}
这样就完成效果了,大家可以试试。
如果需要默认显示电量的话只需要把各个判定条件交换一下位置就好了。

Android6.0电池图标外显示电量百分比相关推荐

  1. iPhone 13如何显示电量百分比?详细教程

    iPhone手机电量没有百分比真的让人很焦虑. 如果你用的是最新的iPhone 13,或其他带有面部识别功能的iPhone手机,在屏幕上是没有电量百分比显示的. 最简单的方法就是从屏幕右上角向下滑动打 ...

  2. android 10.0状态栏显示电量百分比

    1.概述 在10.0的系统产品开发中,对于系统默认的电池电量是不显示的,所以产品需求要求显示电池电量,方便知道当前电量,方便显示在电量不足的情况下可以及时充电,所以来实现这个功能 2.状态栏显示电量百 ...

  3. Android 9.0 代码实现对屏幕亮屏和灭屏的控制和显示电量百分比

    目录 1.概述 2.代码实现对屏幕亮屏和灭屏的控制和显示电量百分比的核心类

  4. Android7.08.0 电池图标分析

    这里只是简单的介绍下电池图标的显示,所以不是全面的电池分析.想做frameworks电池图标定制的可以参考下. frameworks/base/packages/SystemUI/src/com/an ...

  5. android电量百分比,Android P 状态栏显示电量百分比

    状态栏默认显示电量百分比 在Android P 的BatteryMeterView中有集成显示电量百分比相关代码,所以我们只需要将其显示控制条件默认打开就行. 在Settings的Battery的子页 ...

  6. 笔记本电脑右下角的电池图标不显示如何找出

    首先在任务管理器的详细信息中找到 explorer.exe 文件,结束进程,之后在文件中运行新任务,输入explorer,即可重新打开,电池图标就显示啦. 另一种常用方法适合Win10 打开" ...

  7. 苹果x怎么显示电量百分比_苹果7电池百分比,iPhone7电量显示怎么设置 照着学就行了...

    在当下,受制于电池技术因素,手机上的电池电量总是不够用,相信小伙伴们也都是深有体会.在苹果手机上默认是不会显示电池电量百分比的,只会形象地显示一个电池用量图标.如果你想要把电池电量的百分比显示出来,可 ...

  8. [RK3288][Android6.0] 调试笔记 --- 双屏显示内核Patch

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 根据5.1的双屏显示patch,在android6.0上修改了下,因为没硬件环境,所以未经验证,仅供参 ...

  9. 苹果x怎么显示电量百分比_手机资讯:iPhone电量显示不准跳电怎么办

    如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多知识的,这些知识很多小伙伴一般都是不知道的,就好比最近就有很多小伙伴们想要知道iPhone电量显示不准跳电怎么办,那么既然现在大 ...

最新文章

  1. 进击时代!王雪红的谦卑与坚守
  2. 第八课.特征工程与CTR预测
  3. Java之Java程序与虚拟机
  4. gazebo仿真环境加载多个机器人
  5. python string模块安装_python String模块-阿里云开发者社区
  6. 计算机应用虚拟仿真实验答案,虚拟仿真 实验教学+.ppt
  7. Ubuntu Linux配置IP地址
  8. random模块详解
  9. Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)
  10. 后台运行python程序 遇到缓冲区问题
  11. oracle查同比增长_天眼查:目前我国今年新增2.3万家充电桩相关企业,同比增长16.94%...
  12. C/C++信息隐写术(四)之大程序藏入BMP文件
  13. Python中ASCII码的数字和字符的转换
  14. jQuery mobile 开发问题记录
  15. 黑苹果系统镜像稳定版 10.9.5 - 10.15.6 整合下载
  16. linux网页打开慢的解决方法,解决Ubuntu浏览网页速度慢的问题
  17. 期货期权股票资管分仓系统(子账户系统、风控系统)的功能介绍
  18. 三星s8怎么分屏操作_双屏互动,大有可为 三星Galaxy Z Fold2 5G的魅力折叠体验
  19. VUE2使用的JSON编辑器
  20. 华为交换机和锐捷交换机端口隔离

热门文章

  1. 计算机职称考试在线模拟,职称计算机考试Windows模拟测试题
  2. QQ透明皮肤:多层算法 一键适配各种背景
  3. AMCL代码详解(六)amcl中的重采样
  4. hbuilderx云打包ios证书的生成方法
  5. 大班韵律机器人视频_大班律动《机器人》
  6. 煮饭的机器人作文_【会做家务的机器人】作文(八篇)
  7. Hadoop未授权访问漏洞
  8. 电脑插入了一个加密U盘,拷贝东西,随后电脑就出现一个交换区的盘符,U盘拔走以后交换区还在怎么去掉?
  9. 01_Mysql_基础入门
  10. 图形化之家谱遗传系统