1

내 앱의 경우 내 앱이 닫힌 경우에도 배터리 잔량을 모니터링 한 다음 배터리가 일정 비율 미만으로 떨어지면 알림을 보내려고합니다. this과 같은 백그라운드 서비스를 만드는 방법을 알고 있지만 배터리 수준을 모니터링하는 방법을 사용하는 방법을 모르겠습니다. Manifest 파일에 BroadcastReceiver를 등록할까요, 아니면 동적으로해야합니까? 또한 BroadcastReceiver가 최초 업데이트를받은 후 OS에 의해 종료 될 것이라는 우려가 있습니다.Android 백그라운드에서 배터리 잔량을 모니터링하는 방법은 무엇입니까?

+0

http://stackoverflow.com/questions/24532934/checking-battery-level-in-the-background-with- : 이것은 내가 사용했던 것입니다 a-service 걷는 음식의 해결책을보십시오 – Kriptite

답변

6

동적으로 등록해야합니다.

서비스에서 그렇게하는 것이 좋은 방법 일 것입니다.

this.registerReceiver(this.mBatInfoReceiver, 
        new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

을 ...

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     // TODO Auto-generated method stub 
     //this will give you battery current status 

    try{ 
     int level = intent.getIntExtra("level", 0); 
     int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
     int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
     int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 

     String BStatus = "No Data"; 
     if (status == BatteryManager.BATTERY_STATUS_CHARGING){BStatus = "Charging";} 
     if (status == BatteryManager.BATTERY_STATUS_DISCHARGING){BStatus = "Discharging";} 
     if (status == BatteryManager.BATTERY_STATUS_FULL){BStatus = "Full";} 
     if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING){BStatus = "Not Charging";} 
     if (status == BatteryManager.BATTERY_STATUS_UNKNOWN){BStatus = "Unknown";} 

     int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     String BattPowerSource = "No Data"; 
     if (chargePlug == BatteryManager.BATTERY_PLUGGED_AC){BattPowerSource = "AC";} 
     if (chargePlug == BatteryManager.BATTERY_PLUGGED_USB){BattPowerSource = "USB";} 

     String BattLevel = String.valueOf(level); 

     int BHealth = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, -1); 
     String BatteryHealth = "No Data"; 
     if (BHealth == BatteryManager.BATTERY_HEALTH_COLD){BatteryHealth = "Cold";} 
     if (BHealth == BatteryManager.BATTERY_HEALTH_DEAD){BatteryHealth = "Dead";} 
     if (BHealth == BatteryManager.BATTERY_HEALTH_GOOD){BatteryHealth = "Good";} 
     if (BHealth == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE){BatteryHealth = "Over-Voltage";} 
     if (BHealth == BatteryManager.BATTERY_HEALTH_OVERHEAT){BatteryHealth = "Overheat";} 
     if (BHealth == BatteryManager.BATTERY_HEALTH_UNKNOWN){BatteryHealth = "Unknown";} 
     if (BHealth == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE){BatteryHealth = "Unspecified Failure";} 

     //Do whatever with the data here 


    } catch (Exception e){ 
     Log.v(TAG, "Battery Info Error"); 
    } 
    } 
    }; 
+1

왜 나는 그것을 동적으로해야만하는지 알고 있습니까? –

+0

http://developer.android.com/reference/android/os/BatteryManager.html - "명시 적으로 Context.registerReceiver()를 사용하여 등록한 경우에만 매니페스트에 선언 된 구성 요소를 통해이를 수신 할 수 없습니다 (ACTION_BATTERY_LOW 참조). , ACTION_BATTERY_OKAY, ACTION_POWER_CONNECTED 및 ACTION_POWER_DISCONNECTED가 있습니다. –

+1

이 코드는 앱을 시작할 때 한 번만 실행됩니다. 계속 실행하려면 ... 필요합니다. 하기 위해서? – Aradhna

관련 문제