투케이2K

163. (AndroidStudio/android/java) 브로드캐스트 리시버 (BroadcastReceiver) 사용해 배터리 (battery) 충전 상태 확인 실시 본문

Android

163. (AndroidStudio/android/java) 브로드캐스트 리시버 (BroadcastReceiver) 사용해 배터리 (battery) 충전 상태 확인 실시

투케이2K 2021. 5. 25. 09:38

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

 

//TODO ====== [AndroidManifest.xml 파일] ======
<!-- [배터리 잔량 및 충전 이벤트 확인 액티비티] -->
<activity
	android:name=".A_Battery"
	android:screenOrientation="portrait"
	android:windowSoftInputMode="adjustPan"/>


<!-- [배터리 잔량 및 충전 이벤트 확인 리시버] -->
<receiver
	android:name=".A_BatteryReceiver"
	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>









//TODO ====== [JAVA : A_Battery] ======
/** [브로드캐스트 등록 부분] **/
A_BatteryReceiver a_batteryReceiver;
public void setBroaCastStart(){
	Log.d("---","---");
	Log.w("//===========//","================================================");
	Log.d("","\n"+"[A_Battery > setBroaCastStart() 메소드 : 브로드캐스트 등록 실시]");
	Log.d("","\n"+"[로직 : onResume() 메소드에서 등록 수행]");
	Log.w("//===========//","================================================");
	Log.d("---","---");
	try {
		//TODO [브로드캐스트 등록]
		a_batteryReceiver = new A_BatteryReceiver();
		IntentFilter filter = new IntentFilter();
		filter.addAction(Intent.ACTION_POWER_CONNECTED);
		filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
		registerReceiver(a_batteryReceiver, filter);
	}
	catch (Exception e){
		e.printStackTrace();
	}
}


/** [브로드캐스트 해제 부분] **/
public void setBroaCastStop(){
	Log.d("---","---");
	Log.e("//===========//","================================================");
	Log.d("","\n"+"[A_Battery > setBroaCastStop() 메소드 : 브로드캐스트 해제 실시]");
	Log.d("","\n"+"[로직 : onPause() 메소드에서 해제 수행]");
	Log.e("//===========//","================================================");
	Log.d("---","---");
	try {
		//TODO [브로드캐스트 해제]
		if(a_batteryReceiver != null){
			unregisterReceiver(a_batteryReceiver);
		}
	}
	catch (Exception e){
		e.printStackTrace();
	}
}










//TODO ====== [JAVA : A_BatteryReceiver] ======
package kr.co.two2k.manager;

import android.content.BroadcastReceiver;
import android.content.Context;

import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.Date;

public class A_BatteryReceiver extends BroadcastReceiver {

    /**
     * 1. 참고사항 : 애플리케이션을 작업 목록에서 완전히 지워버릴 경우 (kill) 브로드 캐스트 리시버 알림을 받지 못합니다
     * */

    /** [클래스 전역 변수 선언 부분] **/
    public static final String CHARGE_CONNECT_EVENT = "android.intent.action.ACTION_POWER_CONNECTED";
    public static final String CHARGE_DISCONNECT_EVENT = "android.intent.action.ACTION_POWER_DISCONNECTED";
    String actionName = "";
    String actionContent = "";
    Context mContext;

    /** [onReceive 메소드를 재정의 (채널 알림 메시지 확인 부분)] **/
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            mContext = context;
            actionName = String.valueOf(intent.getAction());
            actionContent = String.valueOf(intent.getStringExtra("broadCastData"));
            Log.d("---","---");
            Log.w("//===========//","================================================");
            Log.d("","\n"+"[A_BatteryReceiver > onReceive() 메소드 : 수신받은 채널 알림 내용 확인]");
            Log.d("","\n"+"[채널 : "+String.valueOf(actionName)+"]");
            Log.d("","\n"+"[내용 : "+String.valueOf(actionContent)+"]");
            Log.w("//===========//","================================================");
            Log.d("---","---");

            //TODO [프리퍼런스에 충전 시작, 종료 시간 저장 실시]
            if(CHARGE_CONNECT_EVENT.equals(actionName)){ //TODO [충전 시작 이벤트를 받은 경우]
                Toast.makeText(mContext, "충전이 시작되었습니다", Toast.LENGTH_SHORT).show();
                S_Preference.setString(mContext, "CHARGE_START_TIME", String.valueOf(getNowTime24()));
            }
            else if(CHARGE_DISCONNECT_EVENT.equals(actionName)){ //TODO [충전 종료 이벤트를 받은 경우]
                Toast.makeText(mContext, "충전이 종료되었습니다", Toast.LENGTH_SHORT).show();
                S_Preference.setString(mContext, "CHARGE_END_TIME", String.valueOf(getNowTime24()));
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    /** [현재 날짜 및 시간 확인 메소드] **/
    public static String getNowTime24() {
        long time = System.currentTimeMillis();
        //SimpleDateFormat dayTime = new SimpleDateFormat("hh:mm:ss");
        SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
        String str = dayTime.format(new Date(time));
        return str;
    }

}//TODO [클래스 종료]

/* =========================== */

/* =========================== */

[결과 출력]

/* =========================== */

반응형
Comments