本文实例讲述了android实现侦听电池状态显示、电量及充电动态显示的方法,是android应用程序开发中非常常用的重要功能。分享给大家供大家参考之用。具体方法如下:
使用android系统的电池侦听和系统的电池图片如下;
引入源代码中的两个xml文件(这里我在android2.2的jar包中找不到,所以才引入,源代码路径:c:\android-sdk-windows\platforms\android-8\data\res\drawable),之后会发现stat_sys_battery.xml报错,如下图所示:
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程序设计有所帮助。