用广播(BroadcastReceiver)监听电池的变化
2016-08-30 21:21
369 查看
如果我们想要监听电池电量的变化,只是使用监听事件的话,当我们程序没有运行,就监听不到电池电量的改变,这时候就需要使用广播了,这里就介绍一下广播监听电池的使用,以及一些电池的属性
<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;
@Override
protected 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);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销
unregisterReceiver(bb);
}
/**
* 监控电池的广播
*/
public class BatteryBroadcast extends BroadcastReceiver {
/**
* 当电池电量发生改变时会执行此方法
*/
@Override
public 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 failure
break;
}
}
}
}
<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;
@Override
protected 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);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销
unregisterReceiver(bb);
}
/**
* 监控电池的广播
*/
public class BatteryBroadcast extends BroadcastReceiver {
/**
* 当电池电量发生改变时会执行此方法
*/
@Override
public 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 failure
break;
}
}
}
}
相关文章推荐
- Android之BroadcastReceiver 监听系统广播
- Android学习手记(4) BroadcastReceiver监听电池信息
- Android广播接收 BroadcastReceiver监听系统全局的Broadcast消息
- Android学习篇章57-广播BroadcastReceiver短信监听
- 4.1.3.2 电池充电的监听 Broadcast-Receiver
- 4.1.3.3 Android 网络状态监听的静态广播接受者和动态广播接受者Broadcast-Receiver
- 【Android】利用广播BroadCast监听网络的变化
- 【Android】利用广播BroadCast监听网络的变化
- 通过广播接收者(BroadcastReceiver)或守护线程启动服务,录音机监听电话
- 监听电池变化的广播中携带的数据:Intent.ACTION_BATTERY_CHANGED
- 关于android广播包监听网络状态变化收到java.lang.NullPointerException: Error receiving broadcast Intent
- 使用广播接受者BroadcastReceiver监测网络变化
- Android自定义一个广播接收器BroadcastReceiver监听本地消息
- BroadcastReceiver之动态注册监听网络状态变化
- Android自定义一个广播接收器BroadcastReceiver监听系统wifi连接
- 自定义BroadcastReceiver使用监听网络状态变化
- Android学习手记(4) BroadcastReceiver监听电池信息
- Android BroadcastReceiver 广播分析;无序广播与有序广播优先级规则探讨
- 注册广播BroadcastReceiver
- Android编程四大组件之BroadcastReceiver(广播接收者)用法实例