关闭

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

标签: broadcastreceiver电池
1315人阅读 评论(0) 收藏 举报

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

<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;
			}
		}

	}

}




2
0
查看评论

Android监听电池状态

监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播。1.运行状态如下图:(1)连接USB时的状态(2)断开USB时的状态2.实现代码如下,各个状态通过名字就很容易知道意思,BatteryManager类中定义了电池状态。publ...
  • ameyume
  • ameyume
  • 2015-06-16 21:07
  • 5549

android广播 监听开机 监听电池电量 监听网络

用于注册和申请监听权限//监听开机广播权限 监听电池变化 1.在清单文件中注册广播,并监听的类型 //广播的注册 广播接收者,发送当前电...
  • striveBus
  • striveBus
  • 2017-03-24 11:23
  • 243

Android 平时用到比较多的广播之电池电量状态

确定是否连入了互联网 如果您未连入互联网,则无需安排基于互联网资源的更新。 下面这段代码展示了如何利用 ConnectivityManager 查询活动网络并确定其是否连入了互联网。ConnectivityManager cm =       ...
  • qq_27062249
  • qq_27062249
  • 2017-02-10 09:25
  • 493

Android电池状态监听

如果要监听电池的状态改变,需要动态注册:android.intent.action.BATTERY_CHANGED,收到Action后可以根据对应的Key获取你需要的信息,更详细信息可以参考以下例子中的BatteryChangedReceiver类 package com.example.charg...
  • deng0zhaotai
  • deng0zhaotai
  • 2014-09-24 12:31
  • 2522

android BatteryManager电池管理

首先要说的是,电池管理不是电源管理。算然电源是由电池供给的,但是在逻辑管理中,怎么供电的,和怎么用电的,这两个是分开的。 java代码:  frameworks/frameworks/base/services/java/com/android/server/Ba  tte...
  • u011216417
  • u011216417
  • 2015-05-06 11:59
  • 1543

BroadcastReceiver之动态注册监听网络状态变化

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的...
  • I5741T
  • I5741T
  • 2015-10-17 18:57
  • 762

Android开发之使用BroadcastReceiver实时监听电量(源代码分享)

Android系统中实时的监听手机电量以及开机启动功能都是通过BroadcastReceiver组件实现的。我们可以动态注册这个类的一个实例通过Context.registerReceiver()方法或者静态注册,通过标记在androidmanifest . xml。注意:如果我们注册一个接收器在A...
  • u013900875
  • u013900875
  • 2014-04-29 23:04
  • 3565

Android广播接收 BroadcastReceiver监听系统全局的Broadcast消息

什么是BroadcastReceiver? BroadcastReceiver,广播接收者,它是一个系统全局的监听器,用于监听系统全局的Broadcast消息,所以它可以很方便的 进行系统组件之间的通信。 (了解的可以直接跳过) 1.BroadcastReceiver虽然是一个监听器,但是它...
  • pp523810076
  • pp523810076
  • 2016-10-31 18:19
  • 268

android的Service+BroadcastReceiver对网络连接进行监听

BroadcastReceiver代码: public class ConnChangedReceiver extends BroadcastReceiver { private ConnectivityManager connManager; private NetworkInfo networ...
  • GSH_Android_Bar
  • GSH_Android_Bar
  • 2015-05-09 10:04
  • 507

四大组件之BroadcastReceiver(二)-使用权限和常用的系统广播

接收特定的Broadcast可能需要相应的权限;发送特定的Broadcast也可能指定所需的权限。安卓系统本身也有很多系统发出的Broadcast。本文将把这些内容整理呈上。
  • anddlecn
  • anddlecn
  • 2016-06-24 12:43
  • 7003
    个人资料
    • 访问:21006次
    • 积分:456
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条