publicclassBatteryMonitorActivityextendsActivity {privateTextView batterLevel;privateBroadcastReceiver batteryLevelRcvr;privateIntentFilter batteryLevelFilter;
@OverridepublicvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);
batterLevel=(TextView) findViewById(R.id.batteryLevel);
monitorBatteryState();
}
@OverrideprotectedvoidonDestroy() {super.onDestroy();
unregisterReceiver(batteryLevelRcvr);
}privatevoidmonitorBatteryState() {
batteryLevelRcvr=newBroadcastReceiver() {publicvoidonReceive(Context context, Intent intent) {
StringBuilder sb=newStringBuilder();intrawlevel=intent.getIntExtra("level",-1);intscale=intent.getIntExtra("scale",-1);intstatus=intent.getIntExtra("status",-1);inthealth=intent.getIntExtra("health",-1);intlevel=-1;//percentage, or -1 for unknownif(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) {caseBatteryManager.BATTERY_STATUS_UNKNOWN:
sb.append("no battery.");break;caseBatteryManager.BATTERY_STATUS_CHARGING:
sb.append("'s battery");if(level<=33)
sb.append("is charging, battery level is low"+"["+level+"]");elseif(level<=84)
sb.append("is charging."+"["+level+"]");elsesb.append("will be fully charged.");break;caseBatteryManager.BATTERY_STATUS_DISCHARGING:caseBatteryManager.BATTERY_STATUS_NOT_CHARGING:if(level==0)
sb.append("needs charging right away.");elseif(level>0&&level<=33)
sb.append("is about ready to be recharged, battery level is low"+"["+level+"]");elsesb.append("'s battery level is"+"["+level+"]");break;caseBatteryManager.BATTERY_STATUS_FULL:
sb.append("is fully charged.");break;default:
sb.append("'s battery is indescribable!");break;
}
}
sb.append('');
batterLevel.setText(sb.toString());
}
};
batteryLevelFilter=newIntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelRcvr, batteryLevelFilter);
}
}