原理概述:
手机电池电量的获取在应用程序的开发中也很常用,Android系统中手机电池电量发生变化的消息是通过Intent广播来实现的,常用的Intent的Action有 Intent.ACTION_BATTERY_CHANGED(电池电量发生改变时)、Intent.ACTION_BATTERY_LOW(电池电量达到下限时)、和Intent.ACTION_BATTERY_OKAY(电池电量从低恢复到高时)。
当需要在程序中获取电池电量的信息时,需要为应用程序注册BroadcastReceiver组件,当特定的Action事件发生时,系统将会发出相应的广播,应用程序就可以通过BroadcastReceiver来接受广播,并进行相应的处理。
main.xml布局文件
java代码:
<?xml version="1.0" encoding="utf-8"?> |
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="停止获取电量信息" |
android:textOff="获取电量信息" /> |
<TextView android:id="@+id/tv" |
android:layout_width="fill_parent" |
android:layout_height="wrap_content" /> |
BatteryActivity类
java代码:
import android.app.Activity; |
import android.content.BroadcastReceiver; |
import android.content.Context; |
import android.content.Intent; |
import android.content.IntentFilter; |
import android.os.Bundle; |
import android.widget.CompoundButton; |
import android.widget.TextView; |
import android.widget.ToggleButton; |
import android.widget.CompoundButton.OnCheckedChangeListener; |
public class BatteryActivity extends Activity { |
private ToggleButton tb=null; |
private TextView tv=null; |
private BatteryReceiver receiver=null; |
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) { |
IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED); |
registerReceiver(receiver, filter); |
unregisterReceiver(receiver); |
private class BatteryReceiver extends BroadcastReceiver{ |
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+"%。"); |
本文转载自:安卓巴士 http://www.apkbus.com/forum.php?mod=viewthread&tid=12927