用广播(BroadcastReceiver)监听电池的变化

来源:互联网 发布:敏感词过滤java 编辑:程序博客网 时间:2024/05/14 15:50

如果我们想要监听电池电量的变化,只是使用监听事件的话,当我们程序没有运行,就监听不到电池电量的改变,这时候就需要使用广播了,这里就介绍一下广播监听电池的使用,以及一些电池的属性

<pre name="code" class="java">package com.example.butterydemo;import android.os.BatteryManager;import android.os.Bundle;import android.util.Log;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;public class MainActivity extends Activity {BatteryBroadcast bb;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/* * 代码注册 */// 创建广播对象bb = new BatteryBroadcast();// 创建意图对象IntentFilter iFilter = new IntentFilter();// 添加电池改变的活动iFilter.addAction(Intent.ACTION_BATTERY_CHANGED);registerReceiver(bb, iFilter);}@Overrideprotected void onDestroy() {super.onDestroy();//注销unregisterReceiver(bb);}/** * 监控电池的广播 */public class BatteryBroadcast extends BroadcastReceiver {/** * 当电池电量发生改变时会执行此方法 */@Overridepublic void onReceive(Context context/* 触发广播的Activity */, Intent intent/* 触发广播的意图 */) {Bundle extras = intent.getExtras();//获取意图中所有的附加信息//获取当前电量,总电量int level = extras.getInt(BatteryManager.EXTRA_LEVEL/*当前电量*/, 0);int total = extras.getInt(BatteryManager.EXTRA_SCALE/*总电量*/, 100);//电池温度温度int temperature = extras.getInt(BatteryManager.EXTRA_TEMPERATURE/*电池温度*/);Log.d("温度", temperature+"");Log.e("电量", level+"");Log.wtf("电量", total+"");//电池状态int status = extras.getInt(BatteryManager.EXTRA_STATUS/*电池状态*/);switch (status) {case BatteryManager.BATTERY_STATUS_CHARGING://充电break;case BatteryManager.BATTERY_STATUS_DISCHARGING://放电break;case BatteryManager.BATTERY_STATUS_FULL://充满break;//BatteryManager.BATTERY_STATUS_NOT_CHARGING,未充电,包括放电和充满//BATTERY_STATUS_UNKNOWN:未知状态default:break;}//电池健康程度int health = extras.getInt(BatteryManager.EXTRA_HEALTH);switch (health) {case BatteryManager.BATTERY_HEALTH_GOOD://健康状态break;case BatteryManager.BATTERY_HEALTH_OVERHEAT://过热break;case BatteryManager.BATTERY_HEALTH_COLD://过冷break;case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE://电压过高break;default://其他三个放在default中。dead、unknown、unspecial failurebreak;}}}}



0 0