安卓中,添加电池电量百分比显示的功能

前一阵需要做一个需求,在手机里的设置–电池那一页面加一个电池电量百分比显示的功能,就是一个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,不出我所料,在这个类中也有在控制这个电量百分比,之前没有这个功能的时候,只有插上充电器的时候锁屏界面的状态栏上才会出现这个百分比,然后我就在这个类中修改了一点,

 @Override
public 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中读取已经选择的开启或者关闭,然后再去进行显示或者隐藏。我添加的下面几行就是控制插上充电器之后显示百分比的地方。
好了,就这样全部都做好了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 电池电量检测通常可以通过以下几种方式进行显示: 1. 电池图标显示电池图标通常会出现在设备的状态栏,如手机、平板电脑等设备。通过观察图标的颜色和形状,可以大致了解电池的电量情况。 2. 百分比显示:在一些设备,可以通过设置来选择显示电池电量百分比。这样可以更精确地知道电池还剩余多少电量。 3. LED灯显示:有些设备的电池上会有一个或多个LED灯,通过不同颜色的闪烁或亮灭来表示电池电量的情况。 4. 声音或震动提示:在一些设备电池电量低时会有声音或震动提示,提醒用户需要充电。 总之,不同设备和不同品牌的电池电量检测显示方式可能会有所不同,但通常都会提供多种方式来方便用户了解电池电量的情况。 ### 回答2: 电池电量检测是一种利用电池内部电荷状态来判断电池剩余容量的方法。目前常见的电池电量检测显示方法有三种:基于电压检测、基于电流检测和基于计算模型。 基于电压检测方法是根据电池输出的电压来反映电池电量的高低。一般来说,电池电量高时,输出电压会较高,电池电量低时,输出电压会较低。通过测量电池的输出电压,并与预设的电压阈值进行比较,可以判断出电池的电量是否足够。 基于电流检测方法是通过测量电池的充放电电流来判断电池电量电池在充电时,电流会流入电池,而放电时,电流会流出电池。通过测量电流的大小和方向,可以推断出电池的充放电状态,从而判断电池的电量。 基于计算模型方法是根据电池在不同电荷状态下的电压-电荷曲线来建立数学模型,通过测量电池的电压,并与模型进行比较,可以推断出电池的电量。这种方法需要事先建立准确的模型,能够更加精确地预测电池的电量。 综上所述,电池电量检测的显示方法有基于电压检测、基于电流检测和基于计算模型三种。不同的方法适用于不同类型的电池和检测精度要求。在实际使用,可以根据需求选择合适的方法来显示电池的电量。 ### 回答3: 电池电量检测是指判断电池目前的电量剩余量的方法。如今,智能手机、平板电脑、笔记本电脑等设备都内置了电池电量检测系统。 电池电量检测的显示方法有多种。通常,设备会在状态栏、锁屏界面或者相关设置显示电池电量的图标。这个图标通常以一个绿色的电池形状为主,上面会有一个百分比数字,表示电池的剩余电量。当电池电量越高时,这个图标就会显示更多的电池形状,表示电量相对充足。 此外,一些设备还会提供更详细的电池电量显示方式。例如,在设置,可以查看电池使用情况的统计数据,按照应用程序或功能的使用情况,显示电池消耗的时间和电量百分比。这有助于用户更直观地了解哪些应用程序或功能电池消耗较大,从而做出相应的调整,延长电池的使用时间。 有些设备也可以通过通知心或下拉菜单显示电池电量百分比,以及还有多少剩余时间。这种方式更方便用户随时了解电池电量的情况,以便及时做出决策,如是否需要充电。 总的来说,电池电量检测的显示方法在不同设备上可能会有所不同,但通常都会提供一个电池图标和百分比数字来显示电池的剩余电量。另外,一些设备还提供更详细的电量统计数据和通知心的显示方式,方便用户更好地管理和利用电池电量
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值