安卓中,添加电池电量百分比显示的功能
来源:互联网 发布:剑三和尚捏脸数据 编辑:程序博客网 时间:2024/05/21 19:34
前一阵需要做一个需求,在手机里的设置–电池那一页面加一个电池电量百分比显示的功能,就是一个switch,开启的时候需要百分比显示,关闭的时候就不显示了,虽然功能不是很大,但是毕竟是自己实现的,就想做做笔记~
首先得定位,这个得在framework/package/SystemUI下面进行修改。
<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_keyguard" android:paddingEnd="@dimen/battery_level_padding_end" android:textColor="#ffffff" android:textSize="@dimen/battery_level_text_size" android:importantForAccessibility="noHideDescendants"/>
include下面的Textview就是我加的。而这个Textview在代码中不是写死的,是用View.VISIBLE和View.GONE来控制的,这得看用户的选择。
然后就想着在电池那一页添加一栏电池电量百分比显示这么个SwitchPreference,定位代码到package/app/Settings中有一个类,PowerUsageExts.java,这个类就是控制电池这一页上的所有功能,在他的构造方法里,添加一个SwitchPreference。
sp = mContext.getSharedPreferences("BatteryPercentDisplay", 0); editor = sp.edit();//记住每次的选择 mBatteryPercent = new SwitchPreference(mContext); mBatteryPercent.setKey(KEY_BATTERY_PERCENTAGE);//点击的时候判断这个Key mBatteryPercent.setTitle(R.string.battery_percent_title);//设置名称 mBatteryPercent.setOrder(PREFERENCE_ORDER_FIRST + 3);//需要显示的位置 mBatteryPercent.setChecked(sp.getInt("mState", 0) != 0);//根据记住的上一次的选择 //把这一栏添加到mPowerUsageScreen屏幕里 mPowerUsageScreen.addPreference(mBatteryPercent);
然后这个类中有专门SwitchPreference的点击事件的方法onPowerUsageExtItemsClick,在这个方法中判断点击的Key去事件功能
else if(KEY_BATTERY_PERCENTAGE.equals(preference.getKey())){ if (preference instanceof SwitchPreference) { SwitchPreference pref = (SwitchPreference) preference; int bgState = pref.isChecked() ? 1 : 0; if (mBatteryPercent != null) { mBatteryPercent.setChecked(pref.isChecked()); } Intent intent = new Intent("battery_percentage_sherry"); intent.putExtra("mBatteryState",bgState); //如果点击了,就发送广播去显示或者隐藏咱的那个Textview mContext.sendBroadcast(intent); editor.putInt("mState", bgState); editor.commit(); } // If user click on PowerSaving preference just return here return true; }
然后在Setting里的修改到此结束了,跑到SystemUI下面,找到PhoneStatusBar.java类,在这里findViewbyid咱的Textview,
mBatteryLevel = (TextView) mStatusBarView.findViewById(R.id.battery_level);sp = mContext.getSharedPreferences("BatteryDiasplay", 0);mBatteryLevel.setVisibility(sp.getInt("mPhoneBatteryState", 0) == 1 ? View.VISIBLE : View.GONE);
然后有一个监听电池电量的方法,mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() { 在这里有一个重写的监听电池电量的方法
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
然后就在这个方法中写好计算电池电量的两行代码
String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0); mBatteryLevel.setText(percentage);
然后在这个类中还有一个广播接收器private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 我们在这里去监听刚刚在Setting里点击之后发过来的广播
else if(action.equals("battery_percentage_sherry")){ int mState = intent.getIntExtra("mBatteryState", 0); mBatteryLevel.setVisibility(mState == 1 ? View.VISIBLE : View.GONE); //还要把当前的状态保存 edit = sp.edit(); edit.putInt("mPhoneBatteryState", mState); edit.commit(); }
好了,这样就已经大功告成了,但是,当我打开百分比显示的时候,在锁屏状态下,电池电量百分比根本就没有出来,然后我就想到了一个类,KeyguardStatusBarView.java,不出我所料,在这个类中也有在控制这个电量百分比,之前没有这个功能的时候,只有插上充电器的时候锁屏界面的状态栏上才会出现这个百分比,然后我就在这个类中修改了一点,
@Overridepublic void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) { String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0); mBatteryLevel.setText(percentage); //add by me sp = mContext.getSharedPreferences("BatteryDiasplay", 0); mBatteryLevel.setVisibility(sp.getInt("mPhoneBatteryState", 0) == 1 ? View.VISIBLE : View.GONE); //end by me boolean changed = mBatteryCharging != charging; mBatteryCharging = charging; if (changed) { updateVisibilities(); }}
我就加了两行,第一行是从上一个类中已经存储好的SharedPreference中读取已经选择的开启或者关闭,然后再去进行显示或者隐藏。我添加的下面几行就是控制插上充电器之后显示百分比的地方。
好了,就这样全部都做好了。
- 安卓中,添加电池电量百分比显示的功能
- 电池电量百分比修改
- 显示电池电量
- 安卓中显示下载进度的百分比
- WinCE 电池电量数模转化及百分比转化
- 带百分比显示的seekbar
- 动态显示百分比的圆形
- android 显示电池电量
- 简单电池电量显示
- ImageView电池电量显示
- android shell 电池电量 显示
- Android4.3状态栏增加电量百分比显示功能
- andrid5.0添加开关默认控制电量百分比显示
- 使用多线程实现文件的复制功能,并在控制台显示复制的进度,进度以百分比表示。
- 显示"资料搜寻中"的百分比
- jsp中显示百分比进度的例子
- Java之简单的百分比计算显示
- 设置Label显示百分比变化的NSTimer
- 学习python3 06 map/reduce
- Python 多进程
- Eclipse 制作API文档
- 搜索引擎之阿堂Solr学习笔记系列6(进阶篇:更新索引查询策略)
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- 安卓中,添加电池电量百分比显示的功能
- 关于AOP无法切入同类调用方法的问题
- shape和selector结合
- java中字符串转换成时间格式总结
- SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
- Idea创建一个Maven项目
- Elasticsearch-PHP基本API使用教程
- android点击查看大图(长按保存图片)
- require.js入门简介——和派孔明