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

 更新时间:2017年10月09日 08:56:44   作者:IT985博客  
本篇文章主要介绍了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>

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

相关文章

  • android中对文件加密解密的实现

    android中对文件加密解密的实现

    本文主要介绍了android中对文件加密解密的实现,文件加密现在的应用很广,有需要的朋友可以了解一下。
    2016-10-10
  • Android实现关机重启的方法分享

    Android实现关机重启的方法分享

    这篇文章主要介绍了Android实现关机重启的方法,需要的朋友可以参考下
    2014-02-02
  • Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库

    Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库

    这篇文章是基于Android Studio 3.01版本的,NDK是R16。本文重点给大家介绍Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库的相关知识,感兴趣的朋友一起看看吧
    2018-01-01
  • android异步任务设计思详解(AsyncTask)

    android异步任务设计思详解(AsyncTask)

    AsyncTask在Android十分常用,那为什么如此常用呢,不用行不行呢,内部又是怎么实现的呢,为什么Java的API中没有这个类呢,看完本文后,你将会知道答案
    2014-02-02
  • Android实现微信右侧顶部下拉对话框

    Android实现微信右侧顶部下拉对话框

    这篇文章主要为大家详细介绍了Android实现微信右侧顶部下拉对话框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android圆形控件实现画圆效果

    Android圆形控件实现画圆效果

    这篇文章主要为大家详细介绍了Android圆形控件实现画圆效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 解决Android中自定义DialogFragment解决宽度和高度问题

    解决Android中自定义DialogFragment解决宽度和高度问题

    Android中自定义DialogFragment解决宽度和高度问题但是我们很多时候想把DialogFragment的高度固定,那么我们需要设置DialogFragment的高度,在Fragment的onResume()声明周期方法中设置window的宽高即可
    2017-12-12
  • Android百度地图添加Marker失真问题的解决方案

    Android百度地图添加Marker失真问题的解决方案

    本篇文章主要介绍了Android百度地图添加Marker失真问题的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Android绘制文本与图片及动效详解

    Android绘制文本与图片及动效详解

    这篇文章主要介绍了Android绘制文本与图片及动效方法流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • 深入了解Android IO的底层原理

    深入了解Android IO的底层原理

    这篇文章主要介绍了深入了解Android IO的底层原理,IO有缓冲与非缓冲 IO、直接与非直接 IO、阻塞与非阻塞 IO、同步与异步 IO等分类,具体详情感兴趣的小伙伴可以参考下面文章内容
    2022-06-06

最新评论