본문 바로가기
Android

[안드로이드] BroadcastReceiver

by Sky Titan 2020. 10. 21.
728x90
 

브로드캐스트 개요  |  Android 개발자  |  Android Developers

Android 앱은 Android 시스템 및 기타 Android 앱에서 게시-구독 디자인 패턴과 유사한 브로드캐스트 메시지를 받거나 보낼 수 있습니다. 관심 있는 이벤트가 발생할 때 이러한 브로드캐스트가 전송됩

developer.android.com

 

 

BroadcastReceiver  |  Android 개발자  |  Android Developers

 

developer.android.com

BroadcastReceiver

  • 안드로이드 시스템 상에서 발생하는 여러가지 브로드캐스트 메시지들을 수신하여 각 메시지에 맞게 처리할 수 있도록 하는 컴포넌트이다.
  • 따로 생명주기가 존재하지 않는다.
  • 추상 클래스이므로 상속받는 자식 클래스를 만들어서 onReceive 메서드를 오버라이드해야한다.
  • 예를 들어, 스마트폰이 부팅될 때 송신한 브로드캐스트 메시지를 수신하여 자동으로 앱이 실행되도록 할 수도 있다.

 

예제

  1. BroadcastReceiver를 상속받는 클래스를 생성한다. (MyBroadcastReceiver)
  2. Manifest에 receiver를 등록한다.
  3. BroadcastReceiver를 사용할 액티비티 혹은 서비스에 MyBroadcastReceiver 객체를 만든다.
  4. 수신할 메시지 종료를 정해놓은 Intentfilter를 만든 후 receiver와 함께 register한다.
  5. 테스트를 위하여 버튼을 클릭하면 내가 임의로 정한 브로드캐스트 메시지를 송신하도록 한다.
package org.techtown.test

import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //버튼 클릭 시 MyNotification 메시지 broadcast함
        broad_btn.setOnClickListener {
            var intent = Intent()
            intent.setAction("com.example.broadcast.MY_NOTIFICATION")
            sendBroadcast(intent)
        }


        var br = MyBroadcastReceiver()

        var filter = IntentFilter()

        //수신할 action 종류 넣기
        filter.addAction("com.example.broadcast.MY_NOTIFICATION")

        //브로드캐스트리시버 등록
        registerReceiver(br, filter)

    }
}

 

package org.techtown.test

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

class MyBroadcastReceiver : BroadcastReceiver() {

    //메시지 수신 시 할 작업
    override fun onReceive(context: Context, intent: Intent) {
        Toast.makeText(context, intent.action, Toast.LENGTH_SHORT).show()
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.techtown.test">

    <uses-permission android:name="android.permission.SEND_SMS"/>
    

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <receiver android:name=".MyBroadcastReceiver"  android:exported="true">
        </receiver>


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >


   <Button
       android:id="@+id/broad_btn"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintStart_toStartOf="parent"
       android:text="확인"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

결과

 버튼을 클릭했을 때 발생한 브로드캐스트 메시지를 수신하여 토스트를 띄운다.

 

728x90

댓글