自己在網(wǎng)上搜索了一下,將其總結(jié)如下:
Android開發(fā)者可以利用BroadcastReceiver機(jī)制,獲取電池電量變化的ACTION_BATTERY_CHANGED intent,進(jìn)而獲取當(dāng)前android設(shè)備的電池狀態(tài)。
具體操作步驟:
1. 創(chuàng)建一個(gè)監(jiān)聽ACTION_BATTERY_CHANGED事件的intentFilter。
2. 創(chuàng)建一個(gè)BroadcastReceiver對象,該對象可以接收broadcast intent。
3. 注冊BroadcastReceiver對象來監(jiān)聽ACTION_BATTERY_CHANGED事件。
4. 在BroadcastReceiver對象中,重寫onReceive方法,在onReceive方法的傳入?yún)?shù)intent里獲取需要的電池狀態(tài)信息。
5. 在生命周期結(jié)束時(shí),取消step4中的注冊。
示例代碼:
Java文件
public class BatteryMonitorActivity extends Activity {
private TextView batterLevel;
private BroadcastReceiver batteryLevelRcvr;
private IntentFilter batteryLevelFilter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
batterLevel = (TextView) findViewById(R.id.batteryLevel);
monitorBatteryState();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(batteryLevelRcvr);
}
private void monitorBatteryState() {
batteryLevelRcvr = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
StringBuilder sb = new StringBuilder();
int rawlevel = intent.getIntExtra("level", -1);
int scale = intent.getIntExtra("scale", -1);
int status = intent.getIntExtra("status", -1);
int health = intent.getIntExtra("health", -1);
int level = -1; // percentage, or -1 for unknown
if (rawlevel >= 0 && scale > 0) {
level = (rawlevel * 100) / scale;
}
sb.append("The phone");
if (BatteryManager.BATTERY_HEALTH_OVERHEAT == health) {
sb.append("'s battery feels very hot!");
} else {
switch (status) {
case BatteryManager.BATTERY_STATUS_UNKNOWN:
sb.append("no battery.");
break;
case BatteryManager.BATTERY_STATUS_CHARGING:
sb.append("'s battery");
if (level <= 33)
sb.append(" is charging, battery level is low" + "[" + level + "]");
else if (level <= 84)
sb.append(" is charging." + "[" + level + "]");
else
sb.append(" will be fully charged.");
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
if (level == 0)
sb.append(" needs charging right away.");
else if (level > 0 && level <= 33)
sb.append(" is about ready to be recharged, battery level is low"+ "[" + level + "]");
else
sb.append("'s battery level is" + "[" + level + "]");
break;
case BatteryManager.BATTERY_STATUS_FULL:
sb.append(" is fully charged.");
break;
default:
sb.append("'s battery is indescribable!");
break;
}
}
sb.append(' ');
batterLevel.setText(sb.toString());
}
};
batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelRcvr, batteryLevelFilter);
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/batteryLevel"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:textSize="50dip">
</TextView>
</LinearLayout>
由于移動設(shè)備電池電量的局限,使得電池電量的控制成為評價(jià)一個(gè)移動應(yīng)用好壞的重要標(biāo)準(zhǔn)。個(gè)人認(rèn)為一個(gè)電量控制較好的應(yīng)用,應(yīng)該是一方面合理安排耗電操作,并且follow android開發(fā)中那些省電的best practice,以保證移動設(shè)備的用電效率,另一方面,應(yīng)該識別當(dāng)前電池電量狀態(tài)進(jìn)行耗電操作調(diào)整,例如,當(dāng)電池電量較低時(shí),減小耗電操作的次數(shù),以提供友好的用電方式。