📱 Android

[Android] Notification

콩드로이드 2021. 1. 4. 17:30

안드로이드 개발자라면 한번씩은 해봤을 Notification에 대해 정리해보겠습니다.

 

 

간략히 말하자면 Notification은 사용자에게 앱의 이벤트에 대한 정보를 제공하고, Builder를 통해서 생성해야합니다.

 

 

NotificationChannel은 각 Notification들을 관리하는 것이라 생각하면 되는데, API 26 이상부턴 반드시 추가를 해줘야 Notification을 발생시킬 수 있습니다.

 

 

예제를 통해 더 자세히 알아보겠습니다

 


 

1. NotificationChannel 생성

 

val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   val notificationChannel = NotificationChannel("ID", "채널명", NotificationManager.IMPORTANCE_HIGH)
   notificationChannel.enableVibration(true)
   notificationChannel.lightColor = Color.RED
   notificationChannel.description = "Description"
   
   notificationManager.createNotificationChannel(notificationChannel)
}

 

NotificationChannel("ID", "채널명", NotificationManager.IMPORTANCE_HIGH) : 고유 ID, 사용자가 볼 수 있는 채널명, 중요도 수준 이 3가지를 매개변수로 채널을 설정

notificationChannel.description : 사용자에게 표시될 설명을 표시

notificationChannel.enableVibration : 채널에서 진동, 소리 등을 설정

notificationManager.createNotificationChannel(notificationChannel) : 채널을 등록

 

2. NotificationCompat.Builder  생성

 

위에서 생성한 채널을 사용해서 실제로 노티를 발생시켜보겠습니다

 

노티를 터치했을 때 화면 이동을 위해 PendingIntent도 사용해서 만들어주겠습니다

 

val intent = Intent(contexet, 이동할 액티비티::class.java)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
val title = "노티 제목"
val noti = NotificationCompat.Builder(context, 노티ID)
           .setContentTitle(title)
           .setContentText("타이틀 아래에 표시되는 내용")
           .setSmallIcon(R.drawable.아이콘명칭)
           .setSound(null)
           
val manager = NotificationCompat.from(this)
manager.notify(노티ID, noti.build())

 

각 소스에 지정해야하는 변수들은 한글로 설명을 표시해두었습니다 참고하시길 바랍니다

Builder에서도 지정할 수 있는 속성들이 많기 때문에 더 많은 참조는 공식문서를 통해 보시길 바랍니다 

 

 


위에서 Notification을 생성하는 방법에 대해 알아봤습니다.

그 중 중요도에서 Deprecated된 부분이 있어서 이어서 정리해보겠습니다.

 

API 26 이상에서는 중요도에서

Notification.PRIORITY_HIGH가 deprecated 되었습니다

HIGH뿐만 아니라 PRIORITY_DEFAULT, PRIORITY_LOW, PRIORITY_MIN, PRIORITY_MAX가 전부 Deprecated 되었습니다.

 

 

 

그러므로 API 26 이상에서는 각각의 중요도를 NotificationManager.IMPORTANCE_*** 로 변경시킵니다.

 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  notificationBuilder.setPriority(NotificationManager.IMPORTANCE_HIGH)
} else {
  notificationBuilder.setPriority(Notification.PRIORITY_HIGH) }

 

API 버전별로 중요도를 나눠서 설정하면 됩니다.

 


궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊