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 메시지를 함께 표시합니다.
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)
}