본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Notification Channel ( Oreo 부터 생김 )

by 돼지왕 왕돼지 2020. 2. 26.
반응형

Notification Channel ( Oreo 부터 생김 )


https://medium.com/exploring-android/exploring-android-o-notification-channels-94cd274f604c



What are Notification Channels?


-

Notification Channel 은 notification 들을 groupping 하는 데 사용된다.

User 는 Notification Channel 단위로 Notification 설정을 할 수 있다. 여기서 말하는 설정은 예를 들면 Alarm On/Off, Alarm 형태 등이다.



-

Notification Channel setting 에서 할 수 있는 일은...


1. 모든 Channel 의 Notification 을 On/Off 할 수 있다.

2. Notification 과 Badge 연동을 On/Off 할 수 있다.(제공되면)

3. Notification category 별로 On/Off 시킬 수 있다.



-

Notification Channel Setting 에서 Channel(Category)를 클릭하면 해당 Channel 의 상세 설정에 들어갈 수 있다.

그곳에서 할 수 있는 일은



1. 해당 Channel 의 Notification 을 On/Off 할 수 있다.

2. Notification 과 Badge 연동을 On/Off 할 수 있다.(제공되면)

3. Importance 를 선택해서 Alarm 형태를 설정할 수 있다.

No sound or visual interruption

Show silently

Make sound

Make sound and pop on screen



-

Notification channel 들을 그룹으로 나눌 수 있고, 하나의 notification channel 을 여러 개의 group 에 중복으로 넣을 수도 있다.



-

Pre-O 에서는 Channel 설정에 대한 것이 싹 무시되기 때문에 상관없지만, O 부터는 notification channel 을 반드시 설정해주어야만 한다.

그렇지 않으면 Noti 자체가 뜨지 않는다.





Creating a Notification Channel


-

val notiManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channelId = "myChannelId"
val channelName = "MyChannel"
val importance = NotificationManager.IMPORTANCE_LOW

val notiChannel = NotificationChannel(channelId, channelName, importance)
notiChannel.run{
    enableLights(true)
    setLightColor(Color.RED)
    enableVibration(true)
    setVibrationPattern(arrayOf(100L, 200L, 300L, 400L, 500L))
}
notiManager.createNotificationChannel(notiChannel)



-

NotificationChannel 에는 다음과 같은 option 을 줄 수 있다.

enableLights

setLightColor

enableVibration

setVibrationPattern

setImportance

setSound

setGroup

setBypassDnd ( Dnd 는 Do Not Disturb mode )

setLockScreenVisibility





Creating a Notification Channel Group


-

Notification Channel 을 Group 으로 나눌 수도 있다.

이는 앱이 여러 개의 계정형태나 모드를 지원할 때 유용하다.


createNotificationChannelGroup 을 통해 만들 수 있다.

channelGroup 은 groupId 와 groupName 으로 나뉜다.



-

val groupId = "myGroupId"
val groupName = "My Group"
val notiManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notiManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

// NotificationChannelGroup List 를 만들어서 넘기는 API 도 있다.




Creating a Notification


-

val notiManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notiId = 1
val channelId = "myChannelId"

val noti = Notification.Builder(this)
    .setContentTitle("ContentTitle")
    .setContentText("You've got a new message!")
    .setSmallIcon(R.drawable.ic_not)
    .setChannel(channelId)
    .build()

notiManager.notify(id, notification)




Reading Channel Settings


-

val notiChannel = notiManager.getNotificationChannel("channelId")

위와 같이 Channel 을 가져와서 설정값들을 읽을 수 있다.





Updating Channel Settings


-

User 가 Noti setting 을 바꾼 후에 우리는 그 값을 바꿀 수 없다.

우리가 할 수 있는 것은 Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS 을 통해 해당 페이지로 User 를 보내며 설정을 바꾸기를 권장하는 것 뿐이다.


이 때 EXTRA_CHANNEL_IDEXTRA_APP_PACKAGE 를 통해서 특정 설정 페이지로 direct 로 보낼 수 있다.





Deleting a Notification Channel


-

deleteNotificationChannel(channelId) 를 통해 삭제할 수 있다.




반응형

댓글