延长电池续航时间--测量电池用量

本文介绍了一个简单的Android应用程序,用于获取并展示设备的电池信息。包括电池的健康状况、电量水平、电源来源、是否存在电池、状态、技术类型、温度、电压等详细参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//获取电池信息通过检索固定的Intent,也就是一直会广播出来的Intent
</pre><pre name="code" class="java">package com.example.test_sample;

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.util.Log;
import android.view.Window;
import android.widget.TextView;

public class BatteryInfoActivity extends Activity {

	private static final String TAG = "BatteryInfo";
	private TextView mTextView;
	private BroadcastReceiver mBroadcast;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		//左侧显示图标
		this.requestWindowFeature(Window.FEATURE_LEFT_ICON);
		setContentView(R.layout.batter_info);
		mTextView=(TextView) findViewById(R.id.textShow);
		showBatteryInfos();
	}

	/**
	 * 获取电流安全状态
	 * 
	 * @param health
	 * @return
	 */
	private String healthCodeToString(int health) {
		switch (health) {

		case BatteryManager.BATTERY_HEALTH_DEAD:
			return "Dead";
		case BatteryManager.BATTERY_HEALTH_GOOD:
			return "Good";
		case BatteryManager.BATTERY_HEALTH_OVERHEAT:
			return "Overheat";
		case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
			return "over Voltage";
		case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
			return "unspecified failure";
		case BatteryManager.BATTERY_HEALTH_UNKNOWN:
		default:
			return "unKnown";
		}
	}

	/**
	 * 检测是充电器,还是USB,还是其他
	 * 
	 * @param plugged
	 * @return
	 */
	private String pluggedCodeToString(int plugged) {

		switch (plugged) {
		case 0:
			return "Battery";
		case BatteryManager.BATTERY_PLUGGED_AC:
			return "AC";
		case BatteryManager.BATTERY_PLUGGED_USB:
			return "USB";		
		default:
			return "unKnown";
		}
	}

	/**
	 * 获取电池状态
	 * 
	 * @param status
	 * @return
	 */
	private String statusCodeToString(int status) {
		switch (status) {
		case BatteryManager.BATTERY_STATUS_CHARGING:
			return "Charging";
		case BatteryManager.BATTERY_STATUS_DISCHARGING:
			return "DisChargeing";
		case BatteryManager.BATTERY_STATUS_FULL:
			return "full";
		case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
			return "Not charging";
		case BatteryManager.BATTERY_STATUS_UNKNOWN:
		default:
			return "Unknown";
		}
	}

	private void showBatteryInfo(Intent intent) {
		if (intent != null) {
			int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,
					BatteryManager.BATTERY_HEALTH_UNKNOWN);
			String healthString = "Health:" + healthCodeToString(health);
			Log.d(TAG, healthString);

			int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
			int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);

			float percentage = (scale != 0) ? (100.f * (level / (float) scale))
					: 0.0f;
			String levelString = String.format("Level:%d/%d(%.2f%%)", level,
					scale, percentage);
			Log.d(TAG, levelString);

			int plugged=intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
			String pluggedString="Power source:"+pluggedCodeToString(plugged);
			Log.d(TAG, pluggedString);
			
			boolean present=intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false);//当前是否是电池
			String presentString="Present:"+(present?"yes":"No");
			Log.d(TAG, presentString);
			
			int status=intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);
			String statusString="Status:"+statusCodeToString(status);
			Log.d(TAG, statusString);
			
			String technology=intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
			String technologyString="technology:"+technology;
			
			int temperature=intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, Integer.MIN_VALUE);
			String temperatureString="temperature:"+temperature;
			Log.d(TAG, temperatureString);
			
			int voltage=intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, Integer.MIN_VALUE);
			String voltageString="voltage:"+voltage;
			Log.d(TAG, voltageString);
			
			StringBuilder sb=new StringBuilder();
			sb.append(healthString+"\n");
			sb.append(levelString+"\n");
			sb.append(pluggedString+"\n");
			sb.append(presentString+"\n");
			sb.append(statusString+"\n");
			sb.append(technologyString+"\n");
			sb.append(temperatureString+"\n");
			sb.append(voltageString+"\n");
			
			Log.d(TAG, sb.toString());
			mTextView.setText(sb.toString());
			
			int id=intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, 0);
			getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, id);//设置标题栏左侧的图标
		}else{
			String s="No battery information";
			mTextView.setText(s);
			getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, null);
		}		
	}
	
	private void showBatteryInfos(){
		Intent intent=registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
		showBatteryInfo(intent);
	}
	
	private void createBatteryReceiver(){
		mBroadcast=new BroadcastReceiver() {
			
			@Override
			public void onReceive(Context context, Intent intent) {
				// TODO Auto-generated method stub
				showBatteryInfo(intent);
			}
		};
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		if(mBroadcast==null){
			createBatteryReceiver();
		}
		registerReceiver(mBroadcast, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		//如果应用没有在前台运行,注销接收器以节省功耗
		unregisterReceiver(mBroadcast);
	}

	@Override
	public void onLowMemory() {
		// TODO Auto-generated method stub
		super.onLowMemory();
		unregisterReceiver(mBroadcast);
		mBroadcast=null;
	}
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值