Android电池电量监听的示例代码

监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播。

1.运行状态如下图:

1.充电中的状态

2.未充电时的状态

2.实现代码如下,各个状态通过名字就很容易知道意思,BatteryManager类中定义了电池状态。

public class MainActivity extends Activity {
  private static final String TAG = "MainActivity"; 

  private TextView mTvVoltage;
  private TextView mTvTemperature;
  private TextView mTvLevel;
  private TextView mTvStatus;
  private TextView mTvHealth;
  private TextView mTvTechnology; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    mTvVoltage = (TextView)findViewById(R.id.tv_voltage);
    mTvTemperature = (TextView)findViewById(R.id.tv_temperature);
    mTvLevel = (TextView)findViewById(R.id.tv_level);
    mTvStatus = (TextView)findViewById(R.id.tv_status);
    mTvHealth = (TextView)findViewById(R.id.tv_health);
    mTvTechnology = (TextView)findViewById(R.id.tv_technology); 

    this.registerReceiver(this.mBatteryReceiver, new IntentFilter(
        Intent.ACTION_BATTERY_CHANGED));
  } 

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  } 

  private BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
      int voltage=arg1.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
      mTvVoltage.setText("电压:" + voltage / 1000 + "." + voltage % 1000 + "V"); 

      int temperature=arg1.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);
      mTvTemperature.setText("温度:" + temperature / 10 + "." + temperature % 10 + "℃");
      if (temperature >= 300) {
        mTvTemperature.setTextColor(Color.RED);
      } else {
        mTvTemperature.setTextColor(Color.BLUE);
      } 

      int level=arg1.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
      int scale=arg1.getIntExtra(BatteryManager.EXTRA_SCALE,0);
      int levelPercent = (int)(((float)level / scale) * 100);
      mTvLevel.setText("电量:" + levelPercent + "%");
      if (level <= 10) {
        mTvLevel.setTextColor(Color.RED);
      } else {
        mTvLevel.setTextColor(Color.BLUE);
      } 

      int status = arg1.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);
      String strStatus = "未知状态";;
      switch (status) {
      case BatteryManager.BATTERY_STATUS_CHARGING:
        strStatus = "充电中……";
        break;
      case BatteryManager.BATTERY_STATUS_DISCHARGING:
        strStatus = "放电中……";
        break;
      case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
        strStatus = "未充电";
        break;
      case BatteryManager.BATTERY_STATUS_FULL:
        strStatus = "充电完成";
        break;
      }
      mTvStatus.setText("状态:" + strStatus); 

      int health = arg1.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN);
      String strHealth = "未知 :(";;
      switch (status) {
      case BatteryManager.BATTERY_HEALTH_GOOD:
        strHealth = "好 :)";
        break;
      case BatteryManager.BATTERY_HEALTH_OVERHEAT:
        strHealth = "过热!";
        break;
      case BatteryManager.BATTERY_HEALTH_DEAD: // 未充电时就会显示此状态,这是什么鬼?
        strHealth = "良好";
        break;
      case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
        strHealth = "电压过高!";
        break;
      case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
        strHealth = "未知 :(";
        break;
      case BatteryManager.BATTERY_HEALTH_COLD:
        strHealth = "过冷!";
        break;
      }
      mTvHealth.setText("健康状况:" + strHealth); 

      String technology = arg1.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
      mTvTechnology.setText("电池技术:" + technology);
    }
  };
}

3.Layout布局如下,很简单只有几个TextView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" > 

  <TextView android:id="@+id/tv_battery_status"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="#0000FF"
       android:textStyle="bold"
       android:text="@string/battery_status" /> 

  <LinearLayout android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:layout_below="@id/tv_battery_status" >
    <TextView android:id="@+id/tv_voltage"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
    <TextView android:id="@+id/tv_temperature"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
    <TextView android:id="@+id/tv_level"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
    <TextView android:id="@+id/tv_status"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
    <TextView android:id="@+id/tv_health"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
    <TextView android:id="@+id/tv_technology"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
    </LinearLayout>
</RelativeLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中检查、监听电量和充电状态的方法

    当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始. 电池寿命通过剩余电量和充电状态来影响应用更新的执行.当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快.如果设备不在充电,降低更新频率可以帮助延长电池寿命. 类似的,你可以检查电池剩余电量级别,在电量低时,应该降低更新频率甚至停止更新. 注:此处的更新,指的是类似发送心跳包的动作,或者定时更新内容.并非仅仅指更新应用版本.如果是用户动作,比如翻页刷新,

  • Android电池电量监听的示例代码

    监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: 1.充电中的状态 2.未充电时的状态 2.实现代码如下,各个状态通过名字就很容易知道意思,BatteryManager类中定义了电池状态. public class MainActivity extends Activity { private static final String TAG = "MainActivity"; privat

  • android短信监听工具(示例代码)

    在学习本实例之前,读者请先了解一下android四大组件中的"广播接收者"的基本概念和使用. 由于是"监听程序",所以就不需要建立Activity.这样也算是一种"遮掩"吧.使用BroadcastReceiver,就能达到这"不可告人"的目的.呵呵.当然,使用服务来开发此类应用,更加合适.这里就不再深入讨论"服务"了.本实例仅供学习参考,请勿非法用途. 复制代码 代码如下: package cn.itcas

  • Android Home键监听的实现代码

    之前的一个项目需要监听home键的事件,发现用dispatchKeyEvent无法实现监听,后来查了些资料,才知道home键不能用常规的按键事件监听,需要使用广播的方法.下面是我封装的一个工具类.根据自己实际需要修改吧. 注册广播: HomeListener.getInstance().start(this); 移除广播 HomeListener.getInstance().stop(this); 设置监听回调 HomeListener.getInstance().setHomeKeyliste

  • Android 屏幕切换监听的实例代码

    昨天,我试着在屏幕切换时,使View显示在不同的位置,在网上搜索了一些资料,自己做了一段时间,终于完成了功能. 由于屏幕切换会调用activity的各个生命周期,所以需要在manifest的activity属性加上代码 android:configChanges="keyboardHidden|orientation|screenSize|locale|layoutDirection" 然后重写onConfigurationChanged(),加上自己的处理代码 @Override p

  • Android 7.0 监听网络变化的示例代码

    Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可. public class NetChangeReceiver extends BroadcastReceiver { private static final String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; @Override public void onReceive(Context conte

  • Android App内监听截图加二维码功能代码

    Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列*. 项目地址 测试截图: 截屏原理 android系统并没有提供截屏通知相关的API,需要我们自己利用系统能提供的相关特性变通实现.Android系统有一个媒体数据库,每拍一张照片,或使用系统截屏截取一张图片,都会把这张图片的详细信息加入到这个媒体数据库,并发出内容改变通知,我们可

  • Android实现信号强度监听的方法

    信号强度的监听是Android手机十分常见的一个重要功能.今天本文就以实例展示Android实现信号强度监听的方法.分享给大家供大家参考. 具体实现代码如下: TelephonyManager Tel; MyPhoneStateListener MyListener; /* Update the listener, and start it */ MyListener = new MyPhoneStateListener(); Tel = (TelephonyManager) getSystem

  • Android自定义滑动验证条的示例代码

    本文介绍了Android自定义滑动验证条的示例代码,分享给大家,具体如下: *注:不知道为什么,h5的标签在这里没用了,所以我也只能用Markdown的语法来写了 项目地址:https://github.com/994866755/handsomeYe.seekbar.github.io 需求: 在我们的某些应用中需要滑动验证.比如说这个样子的: 刚开始我也很懵逼要怎么去弄,结果我去看了一些人的代码,有人是用自定义viewgroup去做,就是viewgroup包含滑动块和滑动条.但我觉得太麻烦,

  • Android自定义控件之翻转按钮的示例代码

    本文介绍了Android自定义控件之翻转按钮的示例代码,分享给大家,具体如下: 先看一下效果 一.先定义控件的基本结构 这里我们定义一个容器,所以是在ViewGroup的基础上扩展. 简单起见,直接使用扩展自ViewGroup的LinearLayout,并将我们的控件扩展自LinearLayout. 1.按钮的基本布局如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr

  • android截图事件监听的原理与实现

    Android系统没有对用户截屏行为提供回调的api,所以我们只能走野路子来获取用户是否截屏了.一般大家都会采用如下两种方法 1.监听截屏图片所在目录变化(FileObserver) 2.监听媒体库的变化(ContentObserver) 上面两种方法均不是万能的,需要结合使用才能达到良好的效果,首先看看如何监控目录 在android中,我们可以通过FileObserver来监听目录变化,先来看看如何使用 private static final File DIRECTORY_PICTURES

随机推荐