手机电池电量的获取在应用程序的开发中也很常用,Android系统中手机电池电量发生变化的消息是通过Intent广播来实现的,常用的Intent的Action有 Intent.ACTION_BATTERY_CHANGED(电池电量发生改变时)、Intent.ACTION_BATTERY_LOW(电池电量达到下限时)、和Intent.ACTION_BATTERY_OKAY(电池电量从低恢复到高时)。
当需要在程序中获取电池电量的信息时,需要为应用程序注册BroadcastReceiver组件,当特定的Action事件发生时,系统将会发出相应的广播,应用程序就可以通过BroadcastReceiver来接受广播,并进行相应的处理。
main.xml布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ToggleButton android:id="@+id/tb" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textOn="@string/on_text" android:textOff="@string/off_text" /> <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
strings.xml字符串资源
<resources> <string name="app_name">Eoe.demo!</string> <string name="on_text">停止获取电量信息</string> <string name="off_text">获取电量信息</string> </resources>
BatteryActivity类
public class BatteryActivity extends Activity { private ToggleButton tb = null; private TextView tv = null; private BatteryReceiver receiver = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); receiver = new BatteryReceiver(); tv = (TextView) findViewById(R.id.tv); tb = (ToggleButton) findViewById(R.id.tb); tb.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { // 获取电池电量 if (isChecked) { IntentFilter filter = new IntentFilter( Intent.ACTION_BATTERY_CHANGED); // 注册BroadcastReceiver registerReceiver(receiver, filter); } else { // 停止获取电池电量 unregisterReceiver(receiver); tv.setText(null); } } }); } private class BatteryReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int current = intent.getExtras().getInt("level");// 获得当前电量 int total = intent.getExtras().getInt("scale");// 获得总电量 int percent = current * 100 / total; tv.setText("现在的电量是" + percent + "%。"); } } }
第一次运行的效果如下图:
点击按钮后接收电池电量的广播,并将电池电量的信息显示出来,如下图: