개발 공부 기록/04. Android

[Android][Kotlin]fragment 에서 Notification으로 알림주기

박세류 2021. 2. 15. 12:44

1. 시작하기

알림 콘텐츠를 설정하려면 NotificationCompat.Builder 객체를 사용하여 알림 콘텐츠와 채널을 설정해야 한다.

 

  • setSmallIcon() - 아이콘 설정, 필수 항목이다
  • setContetntTitle - 제목
  • setContentText - 본문 텍스트
 val builder = Notification.Builder(context, "testChannel")
            .setSmallIcon(R.drawable.test_icon)
            .setContentTitle("test")
            .setContentText("test")

 

2. 채널 만들기 및 중요도 설정

 

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val name = "테스트 채널"
            val descriptionText = "testChannel"
            val importance = NotificationManager.IMPORTANCE_DEFAULT
            val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
                description = descriptionText
            }
            
            val notificationManager: NotificationManager =
                getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(channel)
        }

 

* 여기서 중요도(importance)란, HIGH, DEFAULT, LOG, MIN 네가지 종류로 나눠져 있다.

각자의 설명들은 해당 링크에서 읽어보도록 하자.

developer.android.com/training/notify-user/channels#importance

 

알림 채널 만들기 및 관리  |  Android 개발자  |  Android Developers

Android 8.0(API 수준 26)부터는 모든 알림을 채널에 할당해야 합니다. 채널마다 채널의 모든 알림에 적용되는 시각적/음향적 동작을 설정할 수 있습니다. 그런 다음 사용자는 이 설정을 변경하고 앱

developer.android.com

 

3. 알림 표시 및 intent 전달

 notificationManager.notify(1, builder.build())

위와 같이 알림을 표시하기 위해선 notify 함수를 이용하여 notification을 띄워주면 된다.

 

또한, intent를 이용하여 알림을 클릭 시에 원하는 행동을 할 수 있다.

필자는 액티비티를 띄우고 싶었으므로, 

val intent = Intent(context, MainActivity::class.java).apply{
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        }

val pendingIntent : PendingIntent = PendingIntent.getActivity(context, 0, intent, 0)

이와같이 pendingIntent를 초기화 해 준 후,

 

        val builder = Notification.Builder(context, "testChannel")
            .setSmallIcon(R.drawable.witness_icon)
            .setContentTitle("test")
            .setContentText("test")
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)

 

builder에 .setContentIntent를 추가해 준다.

.setAutoCancel은 알림을 눌렀을 때 해당 알림이 삭제되게끔 해주는 메소드이다.

728x90