代码改变世界

使用BroadcastReceiver开发手机电池电量应用

2011-08-24 11:46  Kevin-wang  阅读(711)  评论(0)    收藏  举报

原理概述

        手机电池电量的获取在应用程序的开发中也很常用,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 + "%。");
        }
    }
}

运行结果

第一次运行的效果如下图:

image

点击按钮后接收电池电量的广播,并将电池电量的信息显示出来,如下图:

image

源码下载

源码下载