首页 > 代码库 > Android电池状态监听

Android电池状态监听

如果要监听电池的状态改变,需要动态注册:android.intent.action.BATTERY_CHANGED,收到Action后可以根据对应的Key获取你需要的信息,更详细信息可以参考以下例子中的BatteryChangedReceiver类

package com.example.charginganimation;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {
	private CustomClipLoading ccl;
	private BatteryChangedReceiver receiver = new BatteryChangedReceiver();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		registerReceiver(receiver, getFilter());
	}

	private IntentFilter getFilter() {
		IntentFilter filter = new IntentFilter();
		filter.addAction(Intent.ACTION_BATTERY_CHANGED);
		filter.addAction(Intent.ACTION_BATTERY_LOW);
		filter.addAction(Intent.ACTION_BATTERY_OKAY);
		return filter;
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		unregisterReceiver(receiver);
		super.onDestroy();
	}

	class BatteryChangedReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			final String action = intent.getAction();
			if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_CHANGED)) {
				System.out
						.println("BatteryChangedReceiver BATTERY_CHANGED_ACTION---");
				// 当前电池的电压
				int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,
						-1);
				// 电池的健康状态
				int health = intent
						.getIntExtra(BatteryManager.EXTRA_HEALTH, -1);
				switch (health) {
				case BatteryManager.BATTERY_HEALTH_COLD:
					System.out.println("BATTERY_HEALTH_COLD");
					break;
				case BatteryManager.BATTERY_HEALTH_DEAD:
					System.out.println("BATTERY_HEALTH_DEAD ");
					break;
				case BatteryManager.BATTERY_HEALTH_GOOD:
					System.out.println("BATTERY_HEALTH_GOOD");
					break;
				case BatteryManager.BATTERY_HEALTH_OVERHEAT:
					System.out.println("BATTERY_HEALTH_OVERHEAT");
					break;
				case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
					System.out.println("BATTERY_HEALTH_COLD");
					break;
				case BatteryManager.BATTERY_HEALTH_UNKNOWN:
					System.out.println("BATTERY_HEALTH_UNKNOWN");
					break;
				case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
					System.out.println("BATTERY_HEALTH_UNSPECIFIED_FAILURE");
					break;
				default:
					break;
				}
				// 电池当前的电量, 它介于0和 EXTRA_SCALE之间
				int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
				// 电池电量的最大值
				int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
				// 当前手机使用的是哪里的电源
				int pluged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,
						-1);
				switch (pluged) {
				case BatteryManager.BATTERY_PLUGGED_AC:
					// 电源是AC charger.[应该是指充电器]
					System.out.println("BATTERY_PLUGGED_AC");
					break;
				case BatteryManager.BATTERY_PLUGGED_USB:
					// 电源是USB port
					System.out.println("BATTERY_PLUGGED_USB ");
					break;
				default:
					break;
				}
				int status = intent
						.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
				switch (status) {
				case BatteryManager.BATTERY_STATUS_CHARGING:
					// 正在充电
					System.out.println("BATTERY_STATUS_CHARGING ");
					break;
				case BatteryManager.BATTERY_STATUS_DISCHARGING:
					System.out.println("BATTERY_STATUS_DISCHARGING  ");
					break;
				case BatteryManager.BATTERY_STATUS_FULL:
					// 充满
					System.out.println("BATTERY_STATUS_FULL ");
					break;
				case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
					// 没有充电
					System.out.println("BATTERY_STATUS_NOT_CHARGING ");
					break;
				case BatteryManager.BATTERY_STATUS_UNKNOWN:
					// 未知状态
					System.out.println("BATTERY_STATUS_UNKNOWN ");
					break;
				default:
					break;
				}
				// 电池使用的技术。比如,对于锂电池是Li-ion
				String technology = intent
						.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
				// 当前电池的温度
				int temperature = intent.getIntExtra(
						BatteryManager.EXTRA_TEMPERATURE, -1);
				System.out.println("voltage = " + voltage + " technology = "
						+ technology + " temperature = " + temperature
						+ " level = " + level + " scale = " + scale);
			} else if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_LOW)) {
				// 表示当前电池电量低
				System.out
						.println("BatteryChangedReceiver ACTION_BATTERY_LOW---");
			} else if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_OKAY)) {
				// 表示当前电池已经从电量低恢复为正常
				System.out
						.println("BatteryChangedReceiver ACTION_BATTERY_OKAY---");
			}
		}

	}
}


Android电池状态监听