您的位置:首页 > 移动开发 > Android开发

获取Android设备电池电量状态

2016-09-18 13:42 381 查看
java学习手册下载 
 楼主自己开发的象棋棋谱app,含10万棋谱



Android开发者可以利用BroadcastReceiver机制,获取电池电量变化的ACTION_BATTERY_CHANGED intent,进而获取当前android设备的电池状态。

具体操作步骤:

1. 创建一个监听ACTION_BATTERY_CHANGED事件的intentFilter。

2. 创建一个BroadcastReceiver对象,该对象可以接收broadcast intent。

3. 注册BroadcastReceiver对象来监听ACTION_BATTERY_CHANGED事件。

4. 在BroadcastReceiver对象中,重写onReceive方法,在onReceive方法的传入参数intent里获取需要的电池状态信息。

5. 在生命周期结束时,取消step4中的注册。

java代码
package mm.shandong.com.testbattery;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;

public class TestBatteryActivity extends AppCompatActivity {
BatteryChangedReceiver batteryChangedReceiver;
Button btn_register;
Button btn_unregister;
TextView tv_heath;
TextView tv_level;
TextView tv_maxlevel;
TextView tv_pluged;
TextView tv_status;
TextView tv_other;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_battery);
tv_heath= (TextView) findViewById(R.id.tv_heath);
tv_level= (TextView) findViewById(R.id.tv_level);
tv_maxlevel= (TextView) findViewById(R.id.tv_maxlevel);
tv_pluged= (TextView) findViewById(R.id.tv_pluged);
tv_status= (TextView) findViewById(R.id.tv_status);
tv_other= (TextView) findViewById(R.id.tv_other);
batteryChangedReceiver=new BatteryChangedReceiver();
btn_register= (Button) findViewById(R.id.btn_register);
btn_unregister= (Button) findViewById(R.id.btn_unregister);
btn_unregister.setEnabled(false);
}
//注册电量监听的Broadcastreceiver
public void registBatter(View view){
IntentFilter intentFilter=getFilter();
registerReceiver(batteryChangedReceiver,intentFilter);
btn_register.setEnabled(false);
btn_unregister.setEnabled(true);
Toast.makeText(this,
"电量变化的receiver已经注册成功"
,Toast.LENGTH_SHORT).show();
}
//取消注册电量监听的Broadcastreceiver
public void unRegistBatter(View view){
unregisterReceiver(batteryChangedReceiver);
btn_register.setEnabled(true);
btn_unregister.setEnabled(false);
Toast.makeText(this,"电量变化的receiver已经取消注册",
Toast.LENGTH_SHORT).show();
}
///获取IntentFilter对象
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;
}
public 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)) {
// 当前电池的电压
int voltage = intent.
getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
// 电池的健康状态
int health = intent.
getIntExtra(BatteryManager.EXTRA_HEALTH, -1);
switch (health) {
case BatteryManager.BATTERY_HEALTH_GOOD:
tv_heath.setText("很好");
case BatteryManager.BATTERY_HEALTH_COLD:
tv_heath.setText("BATTERY_HEALTH_COLD");
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
tv_heath.setText("BATTERY_HEALTH_DEAD");
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
tv_heath.setText("BATTERY_HEALTH_OVERHEAT");
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
tv_heath.setText("BATTERY_HEALTH_OVER_VOLTAGE");
break;
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
tv_heath.setText("BATTERY_HEALTH_UNKNOWN");
break;
case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
tv_heath.
setText("BATTERY_HEALTH_UNSPECIFIED_FAILURE");
break;
default:
break;
}
// 电池当前的电量, 它介于0和 EXTRA_SCALE之间
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
tv_level.setText(String.valueOf(level));
// 电池电量的最大值
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
tv_maxlevel.setText(String.valueOf(scale));
// 当前手机使用的是哪里的电源
int pluged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
switch (pluged) {
case BatteryManager.BATTERY_PLUGGED_AC:
// 电源是AC charger.[应该是指充电器]
tv_pluged.setText("电源是AC charger.");
break;
case BatteryManager.BATTERY_PLUGGED_USB:
// 电源是USB port
tv_pluged.setText("电源是USB port");
break;
default:
break;
}
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
switch (status) {
case BatteryManager.BATTERY_STATUS_CHARGING:
// 正在充电
tv_status.setText("正在充电");
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
tv_status.setText("BATTERY_STATUS_DISCHARGING");
break;
case BatteryManager.BATTERY_STATUS_FULL:
// 充满
tv_status.setText("充满");
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
// 没有充电
tv_status.setText("没有充电");
break;
case BatteryManager.BATTERY_STATUS_UNKNOWN:
// 未知状态
tv_status.setText("未知状态");
break;
default:
break;
}
// 电池使用的技术。比如,对于锂电池是Li-ion
String technology = intent.
getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
// 当前电池的温度
int temperature = intent.
getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
String str= "voltage = " + voltage + " technology = "
+ technology + " temperature = " + temperature;
tv_other.setText(str);
} else if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_LOW)) {
// 表示当前电池电量低
} else if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_OKAY)) {
// 表示当前电池已经从电量低恢复为正常
System.out.println(
"BatteryChangedReceiver ACTION_BATTERY_OKAY---");
}
}

}

}


最后,以上例子都来源与安卓学习手册,例子源码,源码例子文档一网打尽。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: