본문 바로가기
안드로이드 코틀린

[Kotlin] 알림 구현 - Action Button & Broadcast Receiver

by teamnova 2022. 10. 9.

안녕하세요. 

오늘은 알림 내에서 Broadcast Receiver로 Action Button을 구현하는 방법을 알아보겠습니다. 

 

 

1. Broadcast Receiver(브로드캐스트 수신기) 등록

' MyReceiver ' 라는 이름으로 새 클래스를 만들고 다음 코드를 추가합니다.

class MyReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
    //여기 있는 코드는 액션 버튼을 누를 때 실행 
        val message = intent?.getStringExtra("MESSAGE")
        if (message != null) {
            Toast.makeText(
                context,
                message,
                Toast.LENGTH_LONG
            ).show()
        }
    }
}

Pending Intent 를 사용하여 Broadcast Receiver를 트리거합니다. 

여기에서 알림에서 전달된 "MESSAGE" 문자열을 추출합니다. 

그리고 해당 메시지가 실제로 존재하는 경우에만 간단한 Toast 메시지를 함께 표시합니다.

 

그런 다음 매니페스트 파일에 Broadcast Receiver를 등록해야 합니다. 

<application> 태그 안에 다음 코드를 추가합니다.

<application>
...
    <receiver android:name="MyReceiver"/>
...
</application>

 

2. Action Button 추가하기 

const val MY_URI = "https://stevdza-san.com"
const val MY_ARG = "message"
@Singleton
@Provides
fun provideNotificationBuilder(
    @ApplicationContext context: Context
): NotificationCompat.Builder {
	
    //  "MyReceiver" 에 대한 인텐트를 생성
    val intent = Intent(context, MyReceiver::class.java).apply {
        putExtra("MESSAGE", "Clicked!") //전달할 메시지("Clicked!")와 해당 메시지를 사용할 수 있는 키("MESSAGE") 설정
    }
    
    // flag 생성, API 레벨 6.0 이상을 사용 하는 경우 Immutable 또는 Mutable 플래그를 지정해줘야 함
    val flag =
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            PendingIntent.FLAG_IMMUTABLE
        else
            0
            
    // getBroadcast() 함수 를 사용하여 Pending Intent를 구성        
    val pendingIntent = PendingIntent.getBroadcast(
        context,
        0,
        intent,
        flag
    )
    
    return NotificationCompat.Builder(context, "Main Channel ID")
        .setContentTitle("Welcome")
        .setContentText("YouTube Channel: Stevdza-San")
        .setSmallIcon(R.drawable.ic_baseline_notifications_24)
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setVisibility(VISIBILITY_PRIVATE)
        .setPublicVersion(
            NotificationCompat.Builder(context, "Main Channel ID")
                .setContentTitle("Hidden")
                .setContentText("Unlock to see the message.")
                .build()
        )
        .addAction(0, "ACTION", pendingIntent)
}

 

 

3. 결과