获取Android设备电池电量状态

自己在网上搜索了一下,将其总结如下:
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文件
public class BatteryMonitorActivity extends Activity{

private TextViewbatterLevel;
private BroadcastReceiverbatteryLevelRcvr;
private IntentFilterbatteryLevelFilter;

@Override
public void onCreate(BundlesavedInstanceState){
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
batterLevel
= (TextView)findViewById(R.id.batteryLevel);
monitorBatteryState();
}

@Override
protected void onDestroy(){
super .onDestroy();
unregisterReceiver(batteryLevelRcvr);
}

private void monitorBatteryState(){
batteryLevelRcvr
= new BroadcastReceiver(){

public void onReceive(Contextcontext,Intentintent){
StringBuildersb
= new StringBuilder();
int rawlevel = intent.getIntExtra( " level " , - 1 );
int scale = intent.getIntExtra( " scale " , - 1 );
int status = intent.getIntExtra( " status " , - 1 );
int health = intent.getIntExtra( " health " , - 1 );
int level = - 1 ; // percentage,or-1forunknown
if (rawlevel >= 0 && scale > 0 ){
level
= (rawlevel * 100 ) / scale;
}
sb.append(
" Thephone " );
if (BatteryManager.BATTERY_HEALTH_OVERHEAT == health){
sb.append(
" 'sbatteryfeelsveryhot! " );
}
else {
switch (status){
case BatteryManager.BATTERY_STATUS_UNKNOWN:
sb.append(
" nobattery. " );
break ;
case BatteryManager.BATTERY_STATUS_CHARGING:
sb.append(
" 'sbattery " );
if (level <= 33 )
sb.append(
" ischarging,batterylevelislow " + " [ " + level + " ] " );
else if (level <= 84 )
sb.append(
" ischarging. " + " [ " + level + " ] " );
else
sb.append(
" willbefullycharged. " );
break ;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
if (level == 0 )
sb.append(
" needschargingrightaway. " );
else if (level > 0 && level <= 33 )
sb.append(
" isaboutreadytoberecharged,batterylevelislow " + " [ " + level + " ] " );
else
sb.append(
" 'sbatterylevelis " + " [ " + level + " ] " );
break ;
case BatteryManager.BATTERY_STATUS_FULL:
sb.append(
" isfullycharged. " );
break ;
default :
sb.append(
" 'sbatteryisindescribable! " );
break ;
}
}
sb.append(
' ' );
batterLevel.setText(sb.toString());
}
};
batteryLevelFilter
= new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelRcvr,batteryLevelFilter);
}
}
布局文件
<? xmlversion = " 1.0 " encoding = " utf-8 " ?>
< LinearLayoutxmlns:android = " http://schemas.android.com/apk/res/android "
android:layout_width
= " fill_parent "
android:layout_height
= " fill_parent "
android:orientation
= " vertical " >
< TextView
android:id
= " @+id/batteryLevel "
android:layout_width
= " fill_parent "
android:layout_height
= " fill_parent "
android:gravity
= " center_vertical|center_horizontal "
android:textSize
= " 50dip " >
</ TextView >
</ LinearLayout >

由于移动设备电池电量的局限,使得电池电量的控制成为评价一个移动应用好坏的重要标准。个人认为一个电量控制较好的应用,应该是一方面合理安排耗电操作,并且follow android开发中那些省电的best practice,以保证移动设备的用电效率,另一方面,应该识别当前电池电量状态进行耗电操作调整,例如,当电池电量较低时,减小耗电操作的次数,以提供友好的用电方式。

更多相关文章

  1. EditText无法获取焦点(android:descendantFocusability用法简析 )
  2. Android实现ListView异步加载图片
  3. 不用SDK manager 下载 Android(安卓)sdk 和 platform API(直接获
  4. Android(安卓)studio 3.1.4 无法获取pom文件
  5. Android:获取APK签名信息
  6. checkbox 与 listview 等混用焦点问题
  7. 不用SDK manager 下载 Android(安卓)sdk 和 platform API(直接获
  8. Android应用开发提高系列(5)——Android动态加载(下)——加载已安装A
  9. Android(安卓)中文api (88)――SharedPreferences

随机推荐

  1. Android(安卓)多线程及多线程中更新控件
  2. 调查显示Android和iOS设备正慢慢侵蚀PC市
  3. Android学习札记53:详解Android中的进程间
  4. Android(安卓)桥接模式
  5. 关于android framework相关的一些看法之-
  6. Android程序员必备的六大顶级开发工具!!!
  7. 仿微信、短信、QQ等消息数目右上角红色小
  8. Android(安卓)--- App列表之分组ListView
  9. 基于树结构的任意层级列表
  10. android屏幕适配,除了使用dp,还可以使用比