반응형
Android Battery
배터리 정보 조회
PowerConnectionReceiver.java
public class PowerConnectionReceiver extends BroadcastReceiver {
private BatteryResultCallback batteryResultCallback;
public PowerConnectionReceiver(BatteryResultCallback batteryResultCallback){
this.batteryResultCallback = batteryResultCallback;
}
@Override
public void onReceive(Context context, Intent intent) {
try {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int batteryLevel = (int) (((float) level / (float) scale) * 100.0f);
batteryResultCallback.callDelegate(batteryLevel, isCharging);
}catch (Exception ex){
ex.printStackTrace();
}
}
}
배터리 상태를 receive 받았을 때 activity 에서 수행 할 작업을 넘기기위한 인터페이스 작성
BatteryResultCallback.java
public interface BatteryResultCallback {
void callDelegate(int batteryLevel, boolean isCharging);
}
Activity 에서.
- 선언
private PowerConnectionReceiver powerConnectionReceiver;
- onCreate 메소드 안에서
powerConnectionReceiver = new PowerConnectionReceiver((batteryLevel, isCharging)->{
Log.d("battery", String.format("%d%%", batteryLevel));
Log.d("battery", isCharging?"충전중":"Cable 연결안됨");
// ui 변경하려면 message handler 사용
});
// lambda 식을 사용안할 경우
/*
powerConnectionReceiver = new PowerConnectionReceiver(new BatteryResultCallback() {
@Override
public void callDelegate(int batteryLevel, boolean isCharging) {
Log.d("battery", String.format("%d%%", batteryLevel));
Log.d("battery", isCharging?"충전중":"Cable 연결안됨");
}
});
*/
- onResume 에서 등록
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
this.registerReceiver(powerConnectionReceiver, intentFilter);
- onPause 에서 해제
this.unregisterReceiver(powerConnectionReceiver);
참고
AndroidManifest.xml 에 아래와 같이 하라고 나와있는 곳도 있는데 해도/안해도 정상 작동 합니다.
오히려 저걸 작성 했을 때 Build apk 를 하면 lint 경고가 발생하더군요. aab 생성할땐 괜찮았는데,
암튼 lint 경고가 찝찝하여 저는 manifest 에서 아래 부분은 추가하지 않았습니다.
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
<action android:name="android.intent.action.BATTERY_LOW"/>
<action android:name="android.intent.action.BATTERY_OKAY"/>
</intent-filter>
</receiver>
728x90
반응형
'Android' 카테고리의 다른 글
[Android] getColor From Resource (0) | 2020.04.08 |
---|---|
[Android] Color Argb 에서 투명도 %에 따른 코드 (0) | 2020.04.07 |
[Android] Array resource. getStringArray 가 항상 null 일때 (0) | 2020.03.18 |
[Android] Landscape 시 알아둬야 할 점 (0) | 2020.03.12 |
[Android] androidx 에서 File 공유하기, File Share (0) | 2020.03.03 |
댓글