原理概述:
手机电池电量的获取在应用程序的开发中也很常用,Android系统中手机电池电量发生变化的消息是通过Intent广播来实现的,常用的Intent的Action有 Intent.ACTION_BATTERY_CHANGED(电池电量发生改变时)、Intent.ACTION_BATTERY_LOW(电池电量达到下限时)、和Intent.ACTION_BATTERY_OKAY(电池电量从低恢复到高时)。
当需要在程序中获取电池电量的信息时,需要为应用程序注册BroadcastReceiver组件,当特定的Action事件发生时,系统将会发出相应的广播,应用程序就可以通过BroadcastReceiver来接受广播,并进行相应的处理。
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <Button
8 android:id="@+id/button"
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content"
11 android:text="取得电池电量" />
12
13 </LinearLayout>
1 package org.gl.demo;
2
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.content.IntentFilter;
6 import android.os.Bundle;
7 import android.view.View;
8 import android.view.View.OnClickListener;
9 import android.widget.Button;
10
11 public class MainActivity extends Activity {
12 private Button button = null;
13
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18
19 button = (Button) findViewById(R.id.button);
20 button.setOnClickListener(new BatteryClickListener());
21 }
22
23 private class BatteryClickListener implements OnClickListener {
24
25 @Override
26 public void onClick(View v) {
27 BatteryBroadcastReceiver receiver = new BatteryBroadcastReceiver();
28 IntentFilter filter = new IntentFilter(
29 Intent.ACTION_BATTERY_CHANGED);
30 MainActivity.this.registerReceiver(receiver, filter);
31
32 }
33
34 }
35 }
1 package org.gl.demo;
2
3 import android.app.AlertDialog;
4 import android.app.Dialog;
5 import android.content.BroadcastReceiver;
6 import android.content.Context;
7 import android.content.DialogInterface;
8 import android.content.Intent;
9
10 public class BatteryBroadcastReceiver extends BroadcastReceiver {
11
12 @Override
13 public void onReceive(Context context, Intent intent) {
14 if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
15 // 获得当前电量
16 int current = intent.getIntExtra("level", 0);
17 // 获取总电量
18 int total = intent.getIntExtra("scale", 0);
19 Dialog dialog = new AlertDialog.Builder(context)
20 .setTitle("电池电量")
21 .setMessage(
22 "电池电量为:" + String.valueOf(current * 100 / total)
23 + "%")
24 .setNegativeButton("关闭",
25 new DialogInterface.OnClickListener() {
26
27 @Override
28 public void onClick(DialogInterface dialog,
29 int which) {
30
31 }
32 }).create();
33 dialog.show();
34 }
35
36 }
37
38 }
39