목적

브로드캐스트 리시버를 활용하여 디바이스의 화면이 켜질때마다 토스트 메세지를 출력한다.

 


개요

브로드캐스트 리시버는 안드로이드 4대 컴포넌트 중 하나로 디바이스의 상태(이벤트)를 사용자가 수신받을 수 있다.

예를 들어 디바이스의 배터리가 부족하거나 SMS를 수신했을때 앱이 특정 행동을 취할 수 있게 할 수 있다.

관련 내용 : https://developer.android.com/guide/components/broadcasts?hl=ko

 


구현 - Kotlin

**

브로드캐스트 리시버는 매니패스트를 사용하는 방법(정적)과 컨텍스트(동적)를 사용하는 방법이 있다.

그러나 Android 8.0부터는 매니패스트를 사용하는 방법에 많은 제약을 갖게 되어서 이 글에서는 컨텍스트를 활용하여 구현한다.

관련내용 : https://developer.android.com/guide/components/broadcast-exceptions?hl=ko

 

디바이스 화면을 켰을때 토스트 메세지만 출력할 것이라 레이아웃은 어떻든 상관없다.

**

 

1. 브로드캐스트 리시버의 서브클래스 생성

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

class ScreenBroadcastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
       if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
           var toast = Toast.makeText(context, "good", Toast.LENGTH_LONG)
           toast.show()
       }
    }
}

브로드캐스트 리시버는 onReceive() 메서드를 통해서 방송을 수신했을때(디바이스의 상태가 변했을때) 어떤 액션을 취할지를 명시할 수 있다.

위 코드는  ACTION_SCREEN_ON을 통해서 화면이 켜졌을때 "good"이라는 토스트 메세지를 출력하도록 명시하고 있다.

 

아래와 같이 브로드캐스트 작업은 ACTION_SCREEN_ON이외에도 다양하다.

 

2. 메인 액티비티

import android.content.*
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

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

        val br : BroadcastReceiver = ScreenBroadcastReceiver()
        val filter = IntentFilter().apply{
            addAction(Intent.ACTION_SCREEN_ON)
            //addAction(Intent.ACTION_SCREEN_OFF)
        }
        registerReceiver(br, filter)

    }
}

먼저 1에서 만들었던 브로드캐스트 리시버의 서브클래스의 객체를 생성하고

IntentFilter()를 이용하여 브로드캐스트중 수신하고 싶은 메세지들을 addAction()을 이용하여 추가한다.

그리고 registerReceiver()를 이용하여 브로드캐스트 리시버를 등록한다.

 

실행해보면 디바이스의 화면이 켜질때마다 "good"이라는 토스트메세지가 나타난다.

*서브리시버를 onCreate()에 놓았기 때문에 다른 앱을 보는 중에서도 화면만 켜면 토스트메세지가 출력된다.