Notification Channels
채널을 지정하지 않은 경우 에러 테스트
패키지명은 모자이크 처리했습니다.
채널이 "null"이라고 뜹니다.
그럼 이제 오류의 원인이 명확해 졌으니, 오류를 해결해보도록 합시다.
Create a notification channel
- NotificationChannel의 ID 객체를 생성.
- 시스템 설정에서 볼 수 있는 description을 설정. setDescription() ( 선택 사항 )
- 알림 채널 등록 createNotificationChannel()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
d
위 코드는 안드로이드 공식 홈페이지에서 권장하는 코드입니다.
만약 해당 채널의 기본 알림 동작을 추가해야할 필요가 있는 경우 enableLights(), setLightColor() 등의 메소드를 통해,
불빛, 색상, 진동패턴등 설정이 가능합니다.
( https://developer.android.com/training/notify-user/channels 참고 )
채널 아이디와, 이름을 설정하고, 채널은 한번만 생성해줍니다.
저의 경우 앱이 시작할때 SharedPreference의 boolean값을 이용해서 채널을 한번만 만들어주었습니다.
채널을 생성한 후, 채널의 ID값을 Notification.Builder(context,CHANNEL_ID) 형식으로 넣어주면 됩니다.
저의 경우..
이미 deprecated 경고표시가 떠있었네요.
Builder의 인자값으로 context,CHANNEL_ID를 넣어주세요.
속이 시원합니다.
테스트해보시면 알림이 잘 오는 것을 확인해볼 수 있습니다.
테스트 단말기의 시스템 설정에서 알림 -> 해당 Application에 가보시면 알림 유형에 생성했던 noti channel이 보입니다.
위와 같은 화면까지 떴다면 이제 채널을 삭제해볼 차례입니다.
Delete a notification channel
// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)
알림 설정 화면에는 스팸 방지 메커니즘으로 삭제된 채널 수가 표시됩니다.
앱을 재설치하거나 앱 데이터를 삭제하여 개발 기기의 테스트 채널을 삭제할 수 있습니다.
테스트는 채널을 여러 개 만들고 삭제해보시면 됩니다.
Create a notification channel group
// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
그룹을 생성했으면 채널을 만들기전 ( createNotificationChannel() 메소드 호출 전 ) setGroup() 메소드를 사용하여
해당 채널이 어느 그룹에 속하는지 설정합니다.
저는 그룹을 두개로 나누어봤습니다. ( 테스트 삼아 )
상당히 많이 쓰이고 있는 기능이고, 유용한 기능이라고 생각합니다.
오늘도 또 한 번 버전별 동작 변경 사항 숙지에 대한 중요성을 깨닫습니다.
새로운 버전이 나오면 즉각 즉각 대응하는 습관을 갖도록 합시다 ㅎㅎ
읽어주셔서 너무 감사하고, 피드백 또는 조언 주시면 감사하겠습니다.
참고자료 : https://developer.android.com/training/notify-user/channels
'Android' 카테고리의 다른 글
Android 8.0 Only fullscreen opaque activities can request orientation error (0) | 2019.07.19 |
---|---|
이미지 가로세로 비율 유지하기 adjustBounds (1) | 2019.01.21 |
안드로이드 GIF 로딩 구현 (0) | 2018.10.29 |