이 문서는 Android 4대 컴포넌트 중 하나인 브로드캐스트 리시버(BroadcastReceiver)를 사용한 앱 간 통신 예제입니다. 두 개의 독립된 프로젝트를 통해 App1이 커스텀 브로드캐스트를 보내고, App2가 이를 수신하는 과정을 보여줍니다.
1. 핵심 개념
Android 브로드캐스트는 시스템 수준의 메시지 발행/구독 메커니즘입니다:
- 브로드캐스트는 앱 간에 송수신할 수 있으며, 커스텀 브로드캐스트뿐만 아니라 시스템 브로드캐스트(부팅 완료, 배터리 변화, 화면 잠금 등)도 수신할 수 있습니다.
- 테스트 방법: 2개의 독립된 Android 프로젝트 생성
- SendDemo: 커스텀 브로드캐스트를 보내는 송신 측 앱
- SendDemo2: 브로드캐스트를 받는 수신 측 앱 (스크린샷에 나온 프로젝트)
2. 수신 측 코드 (SendDemo2)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyBroadCastService extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 브로드캐스트 수신 시 콜백되어 Toast 표시
Toast.makeText(context, "커스텀 브로드캐스트 22222를 수신했습니다", Toast.LENGTH_LONG).show();
}
}
Code language: JavaScript (javascript)
BroadcastReceiver를 상속받고onReceive()를 오버라이드해야 합니다. 브로드캐스트가 수신되면 이 메서드가 자동으로 실행됩니다.- 주의:
onReceive에서는 시간이 오래 걸리는 작업을 하면 안 됩니다. 브로드캐스트의 수명주기가 매우 짧기 때문입니다.
3. 브로드캐스트 리시버 등록 (두 가지 방법)
방법 1: 정적 등록 (AndroidManifest.xml에 등록. 앱이 실행 중이지 않아도 수신 가능하지만, Android 8.0 이후로는 제한됨)
<receiver android:name=".MyBroadCastService">
<intent-filter>
<!-- 액션 식별자. 송신 측은 반드시 동일한 action 문자열을 사용해야 합니다 -->
<action android:name="com.foxdevelop.MY_CUSTOM_BROADCAST"/>
</intent-filter>
</receiver>
Code language: HTML, XML (xml)
송신 측 SendDemo가 브로드캐스트를 보낼 때 Intent의 action은 반드시
com.foxdevelop.MY_CUSTOM_BROADCAST로 지정해야 합니다. 양쪽의 action이 일치해야만 수신할 수 있습니다.
방법 2: 동적 등록 (코드에서 등록. 앱이 실행 중일 때만 수신 가능)
MyBroadCastService receiver = new MyBroadCastService();
IntentFilter filter = new IntentFilter("com.foxdevelop.MY_CUSTOM_BROADCAST");
registerReceiver(receiver, filter);
Code language: JavaScript (javascript)
4. 송신 측 SendDemo의 브로드캐스트 전송 코드
// 커스텀 앱 간 브로드캐스트 전송
Intent intent = new Intent("com.foxdevelop.MY_CUSTOM_BROADCAST");
sendBroadcast(intent);
Code language: JavaScript (javascript)
5. 주의사항
- Android 8.0 (API 26) 이후: 정적 등록된 커스텀 암시적 브로드캐스트는 제한을 받습니다. 많은 커스텀 action이 정적 등록으로는 수신되지 않습니다.
- 해결책: ① 동적 등록 사용; ② 브로드캐스트 전송 시 패키지명을 포함한 명시적 Intent 사용.
- 시스템 브로드캐스트(네트워크 변경, 배터리 등)는 대부분 정상적으로 수신 가능하지만, 일부 시스템 브로드캐스트에도 제한이 있습니다.
- 앱 간 브로드캐스트에는 보안 위험이 있으므로, 권한을 설정해 송수신을 제어할 수 있습니다.
6. 실행 흐름
- SendDemo(송신 측)와 SendDemo2(수신 측) 두 앱을 동일한 기기/에뮬레이터에 설치합니다.
- SendDemo에서 버튼을 누르면
sendBroadcast를 호출하여 action이com.foxdevelop.MY_CUSTOM_BROADCAST인 브로드캐스트를 전송합니다. - 시스템이 브로드캐스트를 디스패치하면, 해당 action에 등록된 모든 BroadcastReceiver(SendDemo2 내의 MyBroadCastService)의 onReceive가 트리거됩니다.
- SendDemo2에 Toast가 표시됩니다:
커스텀 브로드캐스트 22222를 수신했습니다
Android 앱 간 브로드캐스트 수신
Previous: 사용자 정의 브로드캐스트 전송
Next: 순서형 브로드캐스트