loading

프로그래밍/안드로이드

[Android Studio] 브로드캐스트리시버(BroadCastReceiver)의 개념 및 사용예제

침착곰 2021. 6. 20. 15:54
반응형

안녕하세요

이번 포스팅에서는 안드로이드 스튜디오의 브로드캐스트리서버에 대한 개념에 대해서 알아보겠습니다

안드로이드 개발을 하다보면 많이 보는 구문인데 저도 이렇게 개념에 대해서 정의를 해본 것이 처음이라 다른 부분이 있을 수 있습니다

혹시 틀린 부분이 있다면 댓글 부탁드립니다!

 

목차

브로드캐스트리시버(BroadCastReceiver)란??
브로드캐스트리시버의 사용 예제
테스트 화면

브로드캐스트리시버(BroadCastReceiver)란??

먼저 안드로이드 Developers에서 정의한 브로드캐스트입니다

Android 앱은 Android 시스템 및 기타 Android 앱에서 게시-구독 디자인 패턴과 유사한 브로드캐스트 메시지를 받거나 보낼 수 있습니다. 관심 있는 이벤트가 발생할 때 이러한 브로드캐스트가 전송됩니다. 예를 들어 Android 시스템은 시스템 부팅 또는 기기 충전 시작과 같은 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 전송합니다. 또한 앱은 맞춤 브로드캐스트를 전송하여 다른 앱이 관심을 가질만한 사항(예: 일부 새로운 데이터가 다운로드됨)을 관련 앱에 알릴 수 있습니다.

앱은 특정 브로드캐스트를 수신하도록 등록할 수 있습니다. 브로드캐스트가 전송되면 시스템은 특정 유형의 브로드캐스트를 수신하도록 신청한 앱에 브로드캐스트를 자동으로 라우팅합니다.

일반적으로 말하면 브로드캐스트는 앱 전체에 걸쳐 그리고 일반 사용자 플로우 외부에서 메시징 시스템으로 사용될 수 있습니다. 그러나 다음 동영상에 설명된 것처럼 브로드캐스트에 응답하고 백그라운드에서 시스템 성능 저하의 원인이 될 수 있는 작업을 실행하는 기회를 남용하지 않도록 주의해야 합니다.

출처 : https://developer.android.com/guide/components/broadcasts?hl=ko

 

예를 들어 스마트폰에서 전원 충전, 전원 충전 해제, 비행기 모드 돌입, 애플리케이션 설치 완료 등의 다양한 이벤트들이 브로드캐스트에 해당하게 됩니다

대표적으로 아래와 같은 브로드캐스트들이 존재합니다

ACTION_BOOT_COMPLETED
부팅이 끝났을 때 (RECEIVE_BOOT_COMPLETED 권한 등록 필요)

ACTION_CAMERA_BUTTON
카메라 버튼이 눌렸을 때

ACTION_DATE_CHANGED
ACTION_TIME_CHANGED
폰의 날짜, 시간이 수동으로 변했을 때 (설정에서 수정했을 때)

ACTION_SCREEN_OFF
ACTION_SCREEN_ON
화면 on, off

ACTION_AIRPLANE_MODE_CHANGED
비행기 모드

ACTION_BATTERY_CHANGED
ACTION_BATTERY_LOW
ACTION_BATTERY_OKAY
배터리 상태변화

ACTION_PACKAGE_ADDED
ACTION_PACKAGE_CHANGED
ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_INSTALL
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_REPLACED
ACTION_PACKAGE_RESTARTED
어플 설치/제거

ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
충전 관련

ACTION_REBOOT
ACTION_SHUTDOWN
재부팅/종료

ACTION_TIME_TICK
매분마다 수신

android.provider.Telephony.SMS_RECEIVED
sms 수신 (RECEIVE_SMS 권한 필요)

출처 : https://itmir.tistory.com/424

 


 

브로드캐스트리시버의 사용 예제

브로드캐스트리시버의 사용 예제에 대해서 알아보겠습니다

먼저 안드로이드 프로젝트를 생성해줍니다

이어서 브로드캐스트 리시버를 생성해줍니다

1. 프로젝트를 우클릭한 후 "New"메뉴에 들어갑니다

2. "Other"탭에 "Broadcast Receiver"에 들어가서 BroadCast Receiver를 생성해줍니다

 

broadCastRece.java

브로드캐스트리시버에 onReceiver를 정의해줍니다

해당하는 브로드캐스트 이벤트가 발생하면 onReceive에 정의한 이벤트가 작동하게 됩니다

저는 스마트폰에 전원 연결 및 전원 연결 해제 동작을 수행할 때 Toast메시지가 나오도록 구현을 해줬습니다

package com.example.broadcasttest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class broadCastRece extends BroadcastReceiver {

    public final static String MyAction = "com.example.broadcasttest.ACTION_MY_BROADCAST";

    @Override
    public void onReceive(Context context, Intent intent) {
        // 전원연결 및 전원해제 시 Toast메시지를 띄운다
        if(Intent.ACTION_POWER_CONNECTED.equals(intent.getAction()))
        {
            Toast.makeText(context, "전원 연결", Toast.LENGTH_SHORT).show();
        }
        else if(Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction()))
        {
            Toast.makeText(context, "전원 연결 해제", Toast.LENGTH_SHORT).show();
        }
    }
}

 

AndroidManifest.xml

브로드캐스트 이벤트를 사용하기 위해서는 AndroidManifest.xml에 정의를 해줘야 합니다

전원_Connected, 전원_DisConnected를 추가해줍니다

<!-- 브로드캐스트 리시버 정의 -->
<receiver
    android:name=".broadCastRece"
    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>

 

MainActivity.java

MainActivity에서 브로드캐스트리시버를 호출해줍니다!

여기까지 구현이 모두 끝났습니다

package com.example.broadcasttest;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private BroadcastReceiver mReceiver; // 브로드캐스트리시버 선언

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mReceiver = new broadCastRece(); // broadCastRece클래스를 브로드캐스트 리시버로 정의
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        // 필터를 정의하여 broadCastRece클래스에 전송
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_POWER_CONNECTED);
        filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
        registerReceiver(mReceiver, filter);
    }

    @Override
    protected void onPause()
    {
        super.onPause();
        unregisterReceiver(mReceiver);
    }
}

이제 테스트를 해보겠습니다

 


테스트 화면

전원 연결 해제 시

 

전원 연결 시

 

전원 연결 및 전원 연결이 해제될 때 위와 같이 Toast메시지가 출력되는 것을 확인할 수 있습니다

여기까지 브로드캐스트리시버의 개념과 간단한 사용 예제에 대해서 알아봤습니다

반응형
그리드형