Android实现侦听电池状态显示、电量及充电动态显示的方法

时间:2022-09-16 18:59:10

本文实例讲述了android实现侦听电池状态显示、电量及充电动态显示的方法,是android应用程序开发中非常常用的重要功能。分享给大家供大家参考之用。具体方法如下:

使用android系统的电池侦听和系统的电池图片如下;

Android实现侦听电池状态显示、电量及充电动态显示的方法

引入源代码中的两个xml文件(这里我在android2.2的jar包中找不到,所以才引入,源代码路径:c:\android-sdk-windows\platforms\android-8\data\res\drawable),之后会发现stat_sys_battery.xml报错,如下图所示:
 
Android实现侦听电池状态显示、电量及充电动态显示的方法

1.这些图引入到我的drawable目录下,然后将stat_sys_battery.xml中的图片引入路径更改,如下:

?
1
2
3
4
5
6
7
8
9
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:maxlevel="4" android:drawable="@drawable/stat_sys_battery_0" />
 <item android:maxlevel="14" android:drawable="@drawable/stat_sys_battery_10" />
 <item android:maxlevel="29" android:drawable="@drawable/stat_sys_battery_20" />
 <item android:maxlevel="49" android:drawable="@drawable/stat_sys_battery_40" />
 <item android:maxlevel="69" android:drawable="@drawable/stat_sys_battery_60" />
 <item android:maxlevel="89" android:drawable="@drawable/stat_sys_battery_80" />
 <item android:maxlevel="100" android:drawable="@drawable/stat_sys_battery_100" />
</level-list>

2.接下来是在activity中的操作:

创建一个intentfilter

?
1
private intentfilter mintentfilter;

在oncreate的方法中:加入:

?
1
2
3
//电池相关
mintentfilter = new intentfilter();
mintentfilter.addaction(intent.action_battery_changed);

3.接收广播

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//声明消息处理过程
private broadcastreceiver mintentreceiver = new broadcastreceiver() {
  @override
  public void onreceive(context context, intent intent) {
   string action = intent.getaction();
   int status = intent.getintextra("status", 0);
   int health = intent.getintextra("health", 0);
   boolean present = intent.getbooleanextra("present", false);
   int level = intent.getintextra("level", 0);
   int scale = intent.getintextra("scale", 0);
   int icon_small = intent.getintextra("icon-small", 0);
   int plugged = intent.getintextra("plugged", 0);
   int voltage = intent.getintextra("voltage", 0);
   int temperature = intent.getintextra("temperature", 0);
   string technology = intent.getstringextra("technology");
   string statusstring = "";
   switch (status) {
   case batterymanager.battery_status_unknown:
    statusstring = "unknown";
    break;
   case batterymanager.battery_status_charging:
    statusstring = "charging";
    battery_image.setimageresource(r.drawable.stat_sys_battery_charge);
    battery_image.getdrawable().setlevel(level);
    break;
   case batterymanager.battery_status_discharging:
    statusstring = "discharging";
    battery_image.setimageresource(r.drawable.stat_sys_battery);
    battery_image.getdrawable().setlevel(level);
    break;
   case batterymanager.battery_status_not_charging:
    statusstring = "not charging";
    break;
   case batterymanager.battery_status_full:
    statusstring = "full";
    break;
   }
   string healthstring = "";
   switch (health) {
   case batterymanager.battery_health_unknown:
    healthstring = "unknown";
    break;
   case batterymanager.battery_health_good:
    healthstring = "good";
    break;
   case batterymanager.battery_health_overheat:
    healthstring = "overheat";
    break;
   case batterymanager.battery_health_dead:
    healthstring = "dead";
    break;
   case batterymanager.battery_health_over_voltage:
    healthstring = "voltage";
    break;
   case batterymanager.battery_health_unspecified_failure:
    healthstring = "unspecified failure";
    break;
   }
   string acstring = "";
   switch (plugged) {
   case batterymanager.battery_plugged_ac:
    acstring = "plugged ac";
    break;
   case batterymanager.battery_plugged_usb:
    acstring = "plugged usb";
    break;
   }
   log.i("cat", statusstring);
   log.i("cat", healthstring);
   log.i("cat", string.valueof(present));
   log.i("cat", string.valueof(level));
   log.i("cat", string.valueof(scale));
   log.i("cat", string.valueof(icon_small));
   log.i("cat", acstring);
   log.i("cat", string.valueof(voltage));
   log.i("cat", string.valueof(temperature));
   log.i("cat", technology);
   //要看看是不是我们要处理的消息
   if (action.equals(intent.action_battery_changed)) {   
    //电池电量,数字
    log.d("battery", "" + intent.getintextra("level", 0));    
    //电池最大容量
    log.d("battery", "" + intent.getintextra("scale", 0));    
    //电池伏数
    log.d("battery", "" + intent.getintextra("voltage", 0));    
    //电池温度
    log.d("battery", "" + intent.getintextra("temperature", 0));
    //电池状态,返回是一个数字
    // batterymanager.battery_status_charging 表示是充电状态
    // batterymanager.battery_status_discharging 放电中
    // batterymanager.battery_status_not_charging 未充电
    // batterymanager.battery_status_full 电池满
    log.d("battery", "ss" + intent.getintextra("status", batterymanager.battery_status_charging));
    //充电类型 batterymanager.battery_plugged_ac 表示是充电器,不是这个值,表示是 usb
    log.d("battery", "" + intent.getintextra("plugged", 0));
    //电池健康情况,返回也是一个数字
    //batterymanager.battery_health_good 良好
    //batterymanager.battery_health_overheat 过热
    //batterymanager.battery_health_dead 没电
    //batterymanager.battery_health_over_voltage 过电压
    //batterymanager.battery_health_unspecified_failure 未知错误
    log.d("battery", "" + intent.getintextra("health", batterymanager.battery_health_unknown));
   }
  }
 };

这里真正处理图片变换的是以下几句话:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
switch (status) {
case batterymanager.battery_status_unknown:
 statusstring = "unknown";
 break;
case batterymanager.battery_status_charging:
 statusstring = "charging";
 battery_image.setimageresource(r.drawable.stat_sys_battery_charge);
 battery_image.getdrawable().setlevel(level);
 break;
case batterymanager.battery_status_discharging:
 statusstring = "discharging";
 battery_image.setimageresource(r.drawable.stat_sys_battery);
 battery_image.getdrawable().setlevel(level);
 break;
case batterymanager.battery_status_not_charging:
 statusstring = "not charging";
 break;
case batterymanager.battery_status_full:
 statusstring = "full";
 break;
}

4.在onresume方法中注册消息处理器

?
1
registerreceiver(mintentreceiver, mintentfilter);

5.在onpause方法中注销

?
1
unregisterreceiver(mintentreceiver);

希望本文所述对大家的android程序设计有所帮助。