투케이2K

124. (AndroidStudio/android/java) 브로드캐스트 리시버 (BroadcastReceiver) 사용해 채널 알림 메시지 전송 및 수신 확인 본문

Android

124. (AndroidStudio/android/java) 브로드캐스트 리시버 (BroadcastReceiver) 사용해 채널 알림 메시지 전송 및 수신 확인

투케이2K 2021. 4. 28. 14:33
반응형

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

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

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

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

[소스 코드]

[AndroidManifest.xml 파일]

<액티비티 등록 부분>
<activity
            android:name=".A_BroadCast"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan"/>



<브로드캐스트 등록 부분>
<receiver
            android:name=".A_BroadCastReceiver"
            android:enabled="true"
            android:exported="true"/>

[JAVA 파일 : A_BroadCast]

    //========== [클래스 전역 변수 선언] ==========
    String send_Data = "kghTV:hello";
    A_BroadCastReceiver a_broadCastReceiver; //TODO 브로드캐스트 객체 선언
    
    //========== [브로드캐스트 등록 부분] ==========
    public void setBroaCastStart(){
        Log.d("---","---");
        Log.w("//===========//","================================================");
        Log.d("","\n"+"[A_BroadCast > setBroaCastStart() 메소드 : 브로드캐스트 등록 실시]");
        Log.w("//===========//","================================================");
        Log.d("---","---");
        try {
            //TODO 브로드캐스트 등록
            a_broadCastReceiver = new A_BroadCastReceiver();
            IntentFilter filter = new IntentFilter();
            //filter.addAction(Intent.ACTION_POWER_CONNECTED);
            filter.addAction(A_BroadCastReceiver.kgh_chanel);
            filter.addAction(A_BroadCastReceiver.twok_chanel);
            registerReceiver(a_broadCastReceiver, filter);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    //========== [브로드캐스트 해제 부분] ==========
    public void setBroaCastStop(){
        Log.d("---","---");
        Log.e("//===========//","================================================");
        Log.d("","\n"+"[A_BroadCast > setBroaCastStop() 메소드 : 브로드캐스트 해제 실시]");
        Log.e("//===========//","================================================");
        Log.d("---","---");
        try {
            //TODO 브로드캐스트 해제
            unregisterReceiver(a_broadCastReceiver);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    //========== [브로드캐스트 알림 전송] ==========
    public void setBroaCastSend(String send){
        try {
            //TODO 알림 채널별 전송 실시 (AndroidManifest.xml 에 등록된 채널)
            if(send.startsWith("kghTV")){
                Log.d("---","---");
                Log.w("//===========//","================================================");
                Log.d("","\n"+"[A_BroadCast > setBroaCastSend() 메소드 : 브로드캐스트 알림 메시지 전송 수행]");
                Log.d("","\n"+"[채널 : "+String.valueOf("kghTV")+"]");
                Log.d("","\n"+"[내용 : "+String.valueOf(send)+"]");
                Log.w("//===========//","================================================");
                Log.d("---","---");
                Intent sendIntent = new Intent(A_BroadCastReceiver.kgh_chanel);
                sendIntent.putExtra("broadCastData", send); //TODO 전송할 데이터
                sendBroadcast(sendIntent);
            }
            else if(send.startsWith("twokTV")){
                Log.d("---","---");
                Log.w("//===========//","================================================");
                Log.d("","\n"+"[A_BroadCast > setBroaCastSend() 메소드 : 브로드캐스트 알림 메시지 전송 수행]");
                Log.d("","\n"+"[채널 : "+String.valueOf("twokTV")+"]");
                Log.d("","\n"+"[내용 : "+String.valueOf(send)+"]");
                Log.w("//===========//","================================================");
                Log.d("---","---");
                Intent sendIntent = new Intent(A_BroadCastReceiver.twok_chanel);
                sendIntent.putExtra("broadCastData", send); //TODO 전송할 데이터
                sendBroadcast(sendIntent);
            }
            else {
                Log.d("---","---");
                Log.e("//===========//","================================================");
                Log.d("","\n"+"[A_BroadCast > setBroaCastSend() 메소드 : 브로드캐스트 알림 메시지 전송 실패]");
                Log.d("","\n"+"[채널 : "+""+"]");
                Log.d("","\n"+"[내용 : "+String.valueOf(send)+"]");
                Log.e("//===========//","================================================");
                Log.d("---","---");
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

[JAVA 파일 : A_BroadCastReceiver]

package kr.co.two2k.manager;

import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

public class A_BroadCastReceiver extends BroadcastReceiver {

    //========== [클래스 전역 변수 선언 부분] ==========
    public static final String kgh_chanel = "kghTV";
    public static final String twok_chanel = "twokTV";
    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_BroadCastReceiver > onReceive() 메소드 : 수신받은 채널 알림 내용 확인]");
            Log.d("","\n"+"[채널 : "+String.valueOf(actionName)+"]");
            Log.d("","\n"+"[내용 : "+String.valueOf(actionContent)+"]");
            Log.w("//===========//","================================================");
            Log.d("---","---");

            //TODO 팝업창 호출 실시
            getAlertDialog(mContext, actionName, actionContent,"확인","취소");
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    //========== [일회용 AlertDialog 팝업창 호출 메소드 정의 실시] ==========
    public void getAlertDialog(Context context, String header, String content, String ok, String no){
        try {
            //TODO 타이틀 및 내용 표시
            String Tittle = header;
            String Message = content;

            //TODO 버튼 이름 정의
            String buttonNo = no;
            String buttonYes = ok;

            //TODO AlertDialog 팝업창 생성
            new AlertDialog.Builder(context)
                    .setTitle(Tittle) //팝업창 타이틀 지정
                    .setIcon(R.drawable.tk_app_icon) //팝업창 아이콘 지정
                    .setMessage(Message) //팝업창 내용 지정
                    .setCancelable(false) //외부 레이아웃 클릭시도 팝업창이 사라지지않게 설정
                    .setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub

                        }
                    })
                    .setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub

                        }
                    })
                    .show();
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

}//TODO 클래스 종료

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

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

[결과 출력]

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

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

[파일 첨부 : 전체 소스코드]

 

소스코드.txt
0.02MB

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

 

반응형
Comments