Nuke Olaf - Log Store

[Android] 안드로이드 - 배터리 상태변화 확인하기 본문

Android

[Android] 안드로이드 - 배터리 상태변화 확인하기

NukeOlaf 2019. 11. 25. 20:31

https://developer.android.com/training/monitoring-device-state/battery-monitoring?hl=ko

 

배터리 수준 및 충전 상태 모니터링  |  Android Developers

백그라운드 업데이트가 배터리 수명에 미치는 영향을 줄이기 위해 업데이트 빈도를 변경할 때는 현재 배터리 수준과 충전 상태부터 확인하는 것이 좋습니다. 기기의 배터리 수준과 충전 상태에 따라 애플리케이션 업데이트 수행이 배터리 수명에 영향을 미치는 정도가 달라집니다. 기기가 AC 전원을 통해 충전될 때 업데이트 수행이 미치는 영향은 무시할 만한 수준이므로 기기가 콘센트에 연결되어 있을 때는 언제나 대개 새로고침 비율을 최대화할 수 있습니다. 반대로 기기가

developer.android.com

 

안드로이드 디벨로퍼 사이트에 따르면, BatteryManager 는 충전 상태가 포함된 고정 Intent에 모든 배터리 및 충전 세부정보를 브로드 캐스팅한다고 나와있다. 고정 인텐트는 Broadcast Receiver를 등록할 필요가 없다고 한다.

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

다음과 같이 registerReceiver 를 호출하여 receiver에 null을 전달하면, 현재 배터리 상태 인텐트가 반환된다고 한다.

흐음... 일단 내가 사용한 방법은 아래와 같다

public class PowerConnectionReceiver extends BroadcastReceiver {

private final String TAG = "PowerConnectionReceiver";

@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)) { // 충전기 연결 action 을 받은 경우
Log.d(TAG, "onReceive: action = " + intent.getAction());
Toast.makeText(context, "충전기가 연결되었습니다", Toast.LENGTH_LONG).show();
}else if(intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)) { // 충전기 해제 action 을 받은 경우
Log.d(TAG, "onReceive: action = " + intent.getAction());
Toast.makeText(context, "충전기가 해제되었습니다", Toast.LENGTH_LONG).show();
}

}
}

 

MainActivity onCreate() 메서드에 PowerConnectionReceiver 호출

// PowerConnectionReceiver 객체 생성
powerConnectionReceiver = new PowerConnectionReceiver();
filter = new IntentFilter();
filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
registerReceiver(powerConnectionReceiver, filter);

onPause() 와 onResume() 에 리시버 등록 해제 및 등록

 

manifest.xml 에 action 등록

<receiver
android:name=".PowerConnectionReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>

 

Comments