1.系统状态栏添加电量百分比显示

我们要修改SystemUI这个应用,看过源码才知道,其实状态栏是分3个显示的,

锁屏的时候是一个,对应的类是KeyguardStatusBarView,它是一个RelativeLayout,

对应的布局是Keyguard_status_bar.xml

进入后是一个,对应的类是PhoneStatusBar,它是BaseStatusBar的子类

对应的布局是status_bar.xml.xml

下拉通知菜单的时候又是一个,对应的类是StatusBarHeaderView,它是一个RelativeLayout

它对应的布局是Status_bar_expanded_header.xml

要想监听到电量的变化,必须实现BatteryController.BatteryStateChangeCallback这个接口,

它有两个方法,其中onBatteryLevelChanged方法就是监听电量变化的

BatteryController是一个BroadcastReceiver,当电量变化时可以收到

PowerManager.ACTION_POWER_SAVE_MODE_CHANGED这个action,

这时就会走onBatteryLevelChanged方法,所有我们只要实现这个接口就可以监听到。

KeyguardStatusBarView,StatusBarHeaderView和PhoneStatusBar是有实现,

PhoneStatusBar对应的布局是status_bar.xml,在里面加一个textview在自定义电池图标的下面,

然后在onBatteryLevelChanged()方法中去实现电量显示

PhoneStatusBar中:

添加显示电量的textview

<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:layout_marginStart="@dimen/header_battery_margin_expanded"
    android:paddingEnd="@dimen/battery_level_padding_end"
    android:textColor="#ffffff"
    android:textSize="@dimen/battery_level_text_size"
    android:importantForAccessibility="noHideDescendants"/>

<com.android.systemui.statusbar.policy.Clock
    android:id="@+id/clock"
@Override
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
    mBatteryLevel.setText(percentage);
}

如果想要控制电量百分比的显示,只需要写一个ContentObserver做一个开关来监听改变来控制

在packages/apps/Settings/src/com/mediatek/settings/fuelgauge/PowerUsageExts.java 中添加switchpreference

// add by w 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()方法中添加

// add by w 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);
                intent.putExtra("state",bgState);
                if (mBatteryPercentPrf != null) {
                    mBatteryPercentPrf.setChecked(pref.isChecked());
                }
                mContext.sendBroadcast(intent);
            }
            // If user click on PowerSaving preference just return here
            return true;
        }
        //add end

在KeyguardStatusBarView和PhoneStatusBar中添加接收广播即可

在KeyguardStatusBarView中:

<FrameLayout android:id="@+id/system_icons_container"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/status_bar_height"
    android:layout_gravity="center_vertical"
    >
    <include layout="@layout/system_icons" />
</FrameLayout>
<TextView android:id="@+id/battery_level"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:layout_marginStart="@dimen/header_battery_margin_keyguard"
    android:paddingEnd="@dimen/battery_level_padding_end"
    android:textColor="#ffffff"
    android:visibility="gone"
    android:textSize="@dimen/battery_level_text_size"
    android:importantForAccessibility="noHideDescendants"/>
@Override
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
    mBatteryLevel.setText(percentage);
    boolean changed = mBatteryCharging != charging;
    mBatteryCharging = charging;
    if (changed) {updateVisibilities();
    }
}
private void updateVisibilities() {if (mMultiUserSwitch.getParent() != this && !mKeyguardUserSwitcherShowing) {if (mMultiUserSwitch.getParent() != null) {getOverlay().remove(mMultiUserSwitch);
        }addView(mMultiUserSwitch, 0);
    } else if (mMultiUserSwitch.getParent() == this && mKeyguardUserSwitcherShowing) {removeView(mMultiUserSwitch);
    }mBatteryLevel.setVisibility(mBatteryCharging ? View.VISIBLE : View.GONE);
}

可以看到,在KeyguardStatusBarView中加了一个限制条件控制电量百分比显示,在充电的时候才显示

StatusBarHeaderView中类似

当然,你也可以选择一个类实现BatteryController.BatteryStateChangeCallback这个接口,仿照上面的写法

PS:6.0代码

android6.0系统状态栏添加电量百分比相关推荐

  1. android6.0在状态栏添加一键截屏

    在配置文件frameworks/base/packages/SystemUI/res/values/config.xml下添加screenshot [html] view plaincopy < ...

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

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

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

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

  4. 零死角玩转Android6.0系统Healthd深入分析

    零死角玩转Android6.0系统Healthd深入分析 概述 Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework ...

  5. Android6.0 ios,意超越iOS9!谷歌寄希望于Android6.0系统

    虽然在目前全球的移动操作系统上,谷歌的Android系统市场占有率傲视群雄,但在某些方面iOS系统还是更占优势.对此分析师Dan Gallagher认为谷歌和苹果.Android和iOS之间的战况将随 ...

  6. android6.0 添加电量百分比

    要完成这个功能需要修改SystemUI和Settings两部分 一.Settings添加开关--控制是否打开此功能 我选择把开关添加到display模块下 diff --git a/packages/ ...

  7. android6.0 系统时间不自动校准的问题

    软件平台:android6.0 硬件平台:MT6797 最近,发现我们产品中有一定概率的时间是不对的,我感到很诧异,我司的产品怎么可以这莫弱鸡,而且android本身的智能性,区区一个时间怎么可能也不 ...

  8. [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前文章[RK3288][Android6.0] 调试笔记 - 伪电池驱动添加 阐述了如何添加一个 ...

  9. android+桌面歌词,Android6.0系统适配桌面歌词效果

    在360手机助手及各家的音乐播放器软件上,都使用了桌面浮动窗功能,桌面歌词都是在音乐客户端显示在前台时隐藏,在用户把软件切换到后台后显示出来,此效果在Android 6.0以前,大部分都是使用系统的A ...

最新文章

  1. Adam公式+参数解析
  2. bootstrap模态框
  3. hibernate与jpa_将JPA Hibernate与OptaPlanner集成
  4. ffmpeg: error while loading shared libraries: libavdevice.so.52
  5. 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
  6. c语言 数据结构 list、queue、tree抽象数据类型的定义与实现 详尽代码和注释
  7. Bootstrap3 插件的选项
  8. java struts2 上传图片_Java框架Struts2实现图片上传功能
  9. 计算机辅助初中数学教学,计算机辅助数学教学的优势
  10. 计算机基础知识 笔试,计算机基础知识笔试题
  11. dubbo源码-服务发现
  12. R 语言从Github上安装R语言的程序包
  13. Echarts饼状legend如何自动显示值和百分比
  14. vmware上用kali破解wifi
  15. 最简单的让IjkPlayer自动旋转带有rotation视频的方法
  16. E-牛牛小数点_牛客练习赛89(数学)
  17. 时间序列预测框架--Darts--快速开始(下)
  18. 三角定位matlab,基于RSSI校正的三角形质心定位算法
  19. 如何让游戏里的 NPC 拥有自己的意志?
  20. mv或者cp带小括号文件名解析问题总结

热门文章

  1. 【科普】千字解读自动驾驶的十个实用冷知识
  2. cmp指令c语言,cmp命令的含义及其使用方法演示与详解
  3. 深入浅出TF-IDF模型
  4. java 导出word xml格式_关于Java导出Word文件
  5. 家中升级到12M光纤到户了,很给力,速度嗖嗖的
  6. 某公交公司商业智能系统建设方案分享
  7. android天气预报项目总结报告,Android项目:天气预报App
  8. 【Lifelong learning】Efficient Meta Lifelong-Learning with Limited Memory
  9. Git+Github 的工作流程
  10. 基于JAVA考试编排管理系统计算机毕业设计源码+数据库+lw文档+系统+部署