[Android] 배터리 Android 2012. 3. 12. 16:50

배터리에 조사에 대한 샘플이다. 필요하면 찾아 쓰면 좋을 듯 하다.

public class ImageViewActivity extends Activity {
 TextView mStatus;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mStatus = (TextView)findViewById(R.id.result);
 }
 
 public void onResume() {
  super.onResume();
  IntentFilter filter = new IntentFilter();
  filter.addAction(Intent.ACTION_BATTERY_CHANGED);
  filter.addAction(Intent.ACTION_BATTERY_LOW);
  filter.addAction(Intent.ACTION_BATTERY_OKAY);
  filter.addAction(Intent.ACTION_POWER_CONNECTED);
  filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
  registerReceiver(mBRBattery, filter);
 } 

 public void onPause() {
  super.onPause();       
  unregisterReceiver(mBRBattery);
 }

 BroadcastReceiver mBRBattery = new BroadcastReceiver() {
  int Count = 0;
  public void onReceive(Context context, Intent intent) {
   String action = intent.getAction();
   Count++;
   //배터리 충전 상태 변경, registerReceiver 메서드로 명시적으로 등록해야함
   if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
    onBatteryChanged(intent);
   }
   if (action.equals(Intent.ACTION_BATTERY_LOW)) {
    Toast.makeText(context, "배터리 위험 수준", Toast.LENGTH_LONG).show();
   }
   if (action.equals(Intent.ACTION_BATTERY_OKAY)) {
    Toast.makeText(context, "배터리 양호", Toast.LENGTH_LONG).show();
   }
   if (action.equals(Intent.ACTION_POWER_CONNECTED)) {
    Toast.makeText(context, "전원 연결됨", Toast.LENGTH_LONG).show();
   }
   if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) {
    Toast.makeText(context, "전원 분리됨", Toast.LENGTH_LONG).show();
   }
  }

  public void onBatteryChanged(Intent intent) {
   int plug, status, scale, level, ratio;
   String sPlug = "";
   String sStatus = "";

   //배터리 존재 여부 확인
   if (intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false) == false){
    mStatus.setText("배터리 없음");
    return;
   }

   //외부 전원 연결되어 있는지 확인, 0이면 배터리 연결, BATTERY_PLUGGED_AC면 어댑터, USB면 USB에 연결 상태
   plug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
   status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
     BatteryManager.BATTERY_STATUS_UNKNOWN);
   scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);//배터리 레벨 최대량
   level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);//현재 충전 레벨
   //EXTRA_HEALTH 성능 상태, EXTRA_ICON_SMALL 배터리 상태 아이콘 리소스 아이디
   //EXTRA_TECHNOLOHY 배터리 방식 조사, EXTRA_TEMPERATURE 온도 조사, EXTRA_VOLTAGE 전압 조사
   ratio = level * 100 / scale;
   
   switch (plug) {
   case BatteryManager.BATTERY_PLUGGED_AC:
    sPlug = "AC";
    break;
   case BatteryManager.BATTERY_PLUGGED_USB:
    sPlug = "USB";
    break;
   default:
    sPlug = "Battery";
    break;
   }

   switch (status) {
   case BatteryManager.BATTERY_STATUS_CHARGING:
    sStatus = "충전중";
    break;
   case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
    sStatus = "충전중 아님";
    break;
   case BatteryManager.BATTERY_STATUS_DISCHARGING:
    sStatus = "방전중";
    break;
   case BatteryManager.BATTERY_STATUS_FULL:
    sStatus = "만충전";
    break;
   default:
   case BatteryManager.BATTERY_STATUS_UNKNOWN:
    sStatus = "알 수가 없어";
    break;
   }

   String str = String.format("수신 회수:%d\n연결: %s\n상태:%s\n레벨:%d%%",
     Count, sPlug, sStatus, ratio);
   mStatus.setText(str);
  }
 };
}