안녕하세요
이번 포스팅에서는 안드로이드 스튜디오의 브로드캐스트리서버에 대한 개념에 대해서 알아보겠습니다
안드로이드 개발을 하다보면 많이 보는 구문인데 저도 이렇게 개념에 대해서 정의를 해본 것이 처음이라 다른 부분이 있을 수 있습니다
혹시 틀린 부분이 있다면 댓글 부탁드립니다!
목차
브로드캐스트리시버(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메시지가 출력되는 것을 확인할 수 있습니다
여기까지 브로드캐스트리시버의 개념과 간단한 사용 예제에 대해서 알아봤습니다
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[Android Studio] 로컬DB 사용법(SQLiteOpenHelper, DBHelper) (0) | 2021.07.11 |
---|---|
[Android Studio] 안드로이드 생명 주기 (0) | 2021.06.20 |
[Android Studio] 토스트(Toast) 사용법 (1) | 2021.05.15 |
[Android Studio] 메인 메뉴가 사라진 경우 복구하기 (0) | 2021.05.15 |
[Android Studio] 카메라로 찍은 사진 이미지뷰에 넣기 (4) | 2021.05.15 |