관리 메뉴

드럼치는 프로그래머

[안드로이드] Battery 상태 감시하는 방법 본문

★─Programing/☆─Android

[안드로이드] Battery 상태 감시하는 방법

드럼치는한동이 2013. 6. 25. 10:21

오늘은 베터리의 상태를 감시 또는 감지 하는 방법에 대해 알아보겠습니다.


<베터리 관련 Action>
 액션 설명   
 ACTION_BATTERY_CHANGED  
 배터리 충전상태 변경
( 매니페스트로는 불가능,  registerReceiver로 등록해야 한다. )  
 ACTION_BATTERY_LOW  배터리 상태가 위험수준으로 낮아짐  
 ACTION_BATTERY_OKAY    배터리 상태가 위험수준에서 양호한 상태로 전환   
 ACTION_POWER_CONNECTED    외부 전원이 연결  
 ACTION_POWER_DISCONNECTED    외부 전원이 분리  
 


< 베터리 상태에 대한 intent extra 정보 > 
 상태  설명   
 EXTRA_PRESENT    배터리가 존재하는지 조사   
 EXTRA_PLUGGED  
 외부전원에 연결되어 있는지 조사.
 0이면 베터리가 있고, 그 외의 경우 다른 전원 연결
 BATTERY_PLUGGED_AC는 어댑터 연결,
 BATTERY_PLUGGED_USB는 USB 연결
 
 EXTRA_STATUS
 베터리의 현재 상태
 BATTERY_STATUS_CHARGING : 충전중
 BATTERY_STATUS_DISCHARGING : 방전중
 BATTERY_STATUS_FULL : 가득 충전
 BATTERY_STATUS_NOT_CHARGING : 충전중 아님
 BATTERY_STATUS_UNKNOWN : 상태 알 수 없음  
 EXTRA_SCALE  배터리 레벨 최대량 조사   
 EXTRA_LEVEL    현재 충전 레벨 조사   
 EXTRA_HEALTH    배터리의 성능 상태 조사   
 EXTRA_ICON_SMALL    배터리 상태 표시하는 아이콘의 리소스 ID 조사   
 EXTRA_TECHNOLOGY    배터리 방식 조사   
 EXTRA_TEMPERATURE    온도 조사   
 EXTRA_VOLTAGE    전압 조사 
  

 


<example code>

public void onResume(){
   IntentFilter filter = new IntentFiler();
   filter.addAction(Intent.ACTION_BATTERY_CHANGED);
   filter.addAction(Intent.ACTION_BETTERY_LOW);
   filter.addAction(Intent.ACTION_BATTERY_OKAY);
   filter.addAction(Intent.ACTION_POWER_CONNECTED);
   filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
   registerReceiver(mBRBattery, filter);
}
 
public void onPuase(){
   super.onPause();
   unregisterReceiver(mBRBattery);
}
 
BroadcastReceiver mBRBattery = new BroadcastReceiver(){
   int count = 0;
   public void onReceive (Context context, Intent intent){
      String action = intent.getAction();
      count++;
      if (action.equals(Intent.ACTION_BATTERY_CHANGED)){
         onBatteryChanged(intent);
      }
      if(action.equals(Intent.ACTION_BATTERY_LOW)){
         // To do
      }
      if (action.equals(Intent.ACTION_BATTRY_OKAY)){
         // To do
      }
      if (action.equals(Intent.ACTION_BATTRY_CONNECTED)){
         // To do
      }
      if (action.equals(Intent.ACTION_BATTRY_DISCONNECTED)){
         // To do
      }
   }
}
 
public void onBatteryChanged(Intent intent){
   int plug, status, scale, level, ratio;
   String sPlug = "";
   String sStatus = "";
 
   if (intent.getBooleanExtra(BatteryManager.EXTRA_PESENT, false) == false){
      mStatus.setText("no battery");
      return;
   }
 
   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(BatterManager.EXTRA_LEVEL, 0);
   ratio = level * 100 / scale;
 
   switch (plug){
   case BatteryManager.BATTERY_PLUGGED_AC:
      sPlug = "AC";
      break;
   case BatterManager.BATTERY+PLUGGED_USB:
      sPlug = "USB";
      break;
   default:
      sPlug = "BATTERY";
      break;
   }
 
   switch (status){
   case BatteryManager.BATTERY_STATUS_CHARGING:
      sStatus = "Charging";
      break;
   case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
      sStatus = "not charging";
      break;
   case BatteryManager.BATTERY_STATUS_DISCHARGING:
      sStatus = "discharging";
      break;
   case BatteryManager.BATTERY_STATUS_FULL:
      sStatus = "fully charged";
      break;
   default:
   case BatteryManager.BATTERY_STATUS_UNKNOWN:
      sStatus = "Unknwon status";
      break;
   }
}
 


< 에뮬레이터에서 베터리 상태 조정하기 >

  

telnet localhost <emulator num>

 

 명령 설명  
power capacity n    배터리 레벨 변경 n = 0~100   
power ac on/off    외부 전원을 연결 또는 해제   
power status 상태    배터리 상태 변경. 지정 가능 상태는
charging, discharging, not-charging, full, unknown 
power health  배터리 성능 조사      
power present true/false    배터리 탈부착   
power display    배터리 현재 상태 조사 
 

[출처] http://aroundck.tistory.com/212

Comments