본문 바로가기
#모바일 [Mobile]/Android

[Android] 브로드캐스트 리시버 (Broadcast Receiver)

by cy_mos 2019. 6. 26.
반응형

📣 브로드캐스트 리시버 (Broadcast Receiver)

  • Android apps can send or receive broadcast messages from the Android system and other Android apps, similar to the publish-subscribe design pattern. These broadcasts are sent when an event of interest occurs. For example, the Android system sends broadcasts when various system events occur, such as when the system boots up or the device starts charging. Apps can also send custom broadcasts, for example, to notify other apps of something that they might be interested in (for example, some new data has been downloaded).

    Apps can register to receive specific broadcasts. When a broadcast is sent, the system automatically routes broadcasts to apps that have subscribed to receive that particular type of broadcast.

    Generally speaking, broadcasts can be used as a messaging system across apps and outside of the normal user flow. However, you must be careful not to abuse the opportunity to respond to broadcasts and run jobs in the background that can contribute to a slow system performance.
📄 Broadcast Receiver Manifest Source Code
<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />

        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>

        <action android:name="EXAMPLE_INTENT_BROADCASE"/>
    </intent-filter>
</receiver>
📄 Broadcast Receiver Class Source Code
public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        final String action = intent.getAction();

        switch (action) {
            case Intent.ACTION_BATTERY_CHANGED: { /* Here Action ACTION_BATTERY_CHANGED Changed */ break; }
            case Intent.ACTION_BOOT_COMPLETED:  { /* Here Action ACTION_BOOT_COMPLETED Changed */ break; }
            case "EXAMPLE_INTENT_BROADCASE": { /* Here User Custom Broadcast */ break; }
        }

        Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
    }
}
📄 Broadcast Receiver Activity Source Code
// TODO: Broadcast Receiver
final BroadcastReceiver receiver = new MyBroadcastReceiver();

// SYSTEM BROADCAST
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
this.registerReceiver(receiver, filter);

// USER CUSTOM BROADCAST
sendBroadcast( new Intent("EXAMPLE_INTENT_BROADCASE") );

📚 브로드캐스트 리시버 서비스 종류 (Broadcast Receiver Service Type)

  • android.intent.action.BATTERY_CHANGED - sticky broadcast containing the charging state, level, and other information about the battery.

  • android.intent.action.BATTERY_LOW - indicates low battery condition on the device.

  • android.intent.action.BOOT_COMPLETED - this is broadcast once, after the system has finished booting.

  • android.intent.action.CALL - to perform a call to someone specified by the data.

  • android.intent.action.DATE_CHANGED - the date has changed.

  • android.intent.action.REBOOT - have the device reboot.

  • android.net.conn.CONNECTIVITY_CHANGE - The mobile network or wifi connection is changed(or reset)


🃏 Non-ordered vs. Ordered Broadcasts

  • 순서가 없는 일반적인 브로드캐스트 인텐트는 '이론상' 등록된 모든 리시버에게 동시에 전달됩니다. 다시 말해, 어플리케이션 개발자의 입장에서 생각해 본다면, 일반적인 브로드캐스트를 수신하는 어떤 리시버는 동일한 브로드캐스트를 수신하는 다른 리시버와 독립적으로 동작하며, 서로 간에 상호 작용 할 수 있는 인터페이스가 존재하지 않습니다. 간단한 예로, ACTION_BATTERY_LOW 와 같은 인텐트를 들 수 있겠습니다. 여러분은 해당 브로드캐스트를 수신하는 리시버를 구현할 수는 있지만, 리시버 내부에서 또 다른 리시버가 이 인텐트를 수신할 수 없도록 하거나, 송신되는 내용을 변경하는 등의 일을 할 수는 없습니다.

    이와는 다르게, 순서 있는 브로드 캐스트 (Ordered Broadcast)는 등록된 각각의 리시버에 정해진 순서대로 전달됩니다. (이 순서는 여러분이 메니페스트 상에 리시버를 정의할 때 설정해둔 android:priority 속성 값에 의해 결정됩니다. 숫자가 높을 수록 우선 순위가 높다고 생각하시면 됩니다.) 한 번에 하 나씩 차례로 리시버가 동작하기 때문에, 리시버 내부에서 브로드 캐스트 전송 작업을 중지 시켜, 자신 보다 우선 순위가 낮은 리시버들은 이 메세지를 전달 받지 못하도록 하거나, setResult() / getResult() 등의 메서드를 이용하여 전달될 메세지의 내용을 수정하거나 상위 리시버가 전달해준 내용을 확인 할 수 있습니다.

📣 REFERENCE

반응형

댓글