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

原理概述

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

源码下载

源码下载

你可能感兴趣的:(使用BroadcastReceiver开发手机电池电量应用)