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_ID 와 EXTRA_APP_PACKAGE 를 통해서 특정 설정 페이지로 direct 로 보낼 수 있다.
Deleting a Notification Channel
-
deleteNotificationChannel(channelId) 를 통해 삭제할 수 있다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Java] regex 를 써보자 - 아주 기초 (0) | 2020.03.01 |
---|---|
[regex] 정규식의 성능을 개선해보자. (0) | 2020.02.27 |
[android] 성능에 대한 미신들을 때려잡자! ( from Dev Summit 2019 ) (0) | 2019.11.16 |
[android] AndroidX 로의 migration : 그 때가 왔다! ( from Dev Summit 19 ) (0) | 2019.11.15 |
[android] Coding in Style: Static Analysis with Custom Lint Rules ( from Dev Summit 19 ) (0) | 2019.11.14 |
댓글