안드로이드 8.0(API 레벨 26)부터, 알림 채널이 당신이 보여주고자 하는 알림의 타입 각각에 대한 사용자 정의 채널을 만들수 있게 합니다. 알림 채널은 사용자가 알림을 관리할 수 있도록 도와주는 통합된 시스템을 제공합니다. 안드로이드 8.0을 타겟으로 할 때, 하나나 그 이상의 당신의 사용자에게 알림을 보여주기 위한 알림 채널을 구현해야 합니다. 만약 안드로이드 8.0을 타겟으로 하지 않고 안드로이드 8.0이 적용된 기기에서 앱이 사용될 경우, 안드로이드 7.1이나 그 아래 버전의 기기와 동일하게 동작합니다.
Notification Channel을 통해 Notification을 여러가지 용도로 나누어서 관리할 수 있게 만들어 줍니다.
* 8.0 부터는 Notification Channel을 만들어 주지 않으면 알림이 오지 않습니다.
알림채널(Notification Channel) 만들기
createNotificationChannels()를 호출해 복수의 알림 채널을 생성할 수 있습니다.
만약 앱이 다중 사용자 계정을 지원한다면, 각각의 계정에 대해 알림 채널 그룹을 생성할 수 있습니다. 알림 채널 그룹은 단일 앱 내 동일한 이름을 지닌 다중 알림 채널을 관리할 수 있게 해줍니다. 예를 들어, 소셜 네트워킹 앱에는 개인 및 비즈니스용 사용자 계정에 대해 지원이 포함될 수 있습니다. 이 시나리오에, 각 사용자 계정은 동일한 기능과 이름의 다중 알림채널이 요구됩니다.
이 예시에 나온 각각의 사용자 계정에 관련된 알림 채널을 전용 그룹으로 구성하면 사용자가 Settings 안의 그들을 쉽게 구별할 것입니다. 각 알림 채널 그룹은 패키지 내의 유일한(유니크한) ID와 사용자에게 보여지는 이름을 요구합니다. 다음 코드는 알림 채널 그룹을 어떻게 만드는지에 대한 시범입니다.
// 그룹의 ID
String group = "my_group_01";
// 사용자에게 보여지는 그룹의 이름
CharSequence name = getString(R.string.group_name);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group, name));
새 그룹을 만든 후에 setGroup()을 호출해 그룹과 함께 새 채널을 조직할 수 있습니다. 알림 매니저에 채널을 등록하기 전에만 알림 채널과 그룹간의 연결을 수정을 할 수 있습니다.
Reading notification channel settings
사용자들은 진동과 알림 소리와 같은 동작과 더불어 알림 채널의 설정을 수정할 수 있습니다. 당신은 다음 두 메소드를 호출해 사용자가 알림 채널에 적용한 설정을 검색할 수 있습니다.
NotificationChannel을 사용해 getVibrationPattern()과 getSound()와 같은 사용자가 현재 어떤 설정을 했는지 찾아내는 메소드를 사용할 수 있습니다. 사용자가 알림 채널을 차단했는지 알아보려면 getImportance()를 호출할 수 있습니다. 만약 알림 채널이 차단되었다면, getImportance()는 IMPORTANCE_NONE
을 반환합니다.
알림 채널 생성 후에, 사용자는 그것의 설정과 작동을 담당하게 됩니다. createNotificationChannel()을 호출해서 알림 채널을 다시 알림 매니저에 등록해 알림 채널의 이름을 바꾸거나 그것의 설명을 업데이트할 수 있습니다.
다음 샘플 코드는 인텐트를 만들고 액티비티를 시작하여 사용자를 알림 채널 설정으로 재연결시키는 방법을 묘사합니다. 이 사례에서, 인텐트는 알림 채널의 ID, 그리고 앱의 패키지 이름를 포함하는 확장된 데이터를 요구합니다.
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, mChannel.getId());
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 채널의 아이디
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
기본적으로, 각 알림 채널은 앱의 런처 아이콘 뱃지에 활성화된 알림을 반영합니다. setShowBadge() 메소드를 사용하여 채널로부터 뱃지에 반영되는 알림 표시를 멈출 수 있습니다. 알림 채널을 위한 이 설정은 그것이 만들어지고 알림 매니저에 등록된 이후에는 프로그래밍적인 방법으로는 수정할 수 없습니다.
참고: 사용자는 언제든 설정 앱을 통해 알림 채널이나 앱의 뱃지를 끌 수 있습니다.
다음 샘플 코드는 어떻게 알림 채널로부터의 알림에 관련된 뱃지를 숨기는지 설명합니다:
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 채널의 ID
String id = "my_channel_01";
// 사용자에게 보이는 채널의 이름
CharSequence name = getString(R.string.channel_name);
// 사용자에게 보이는 채널의 설명
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// 알림 채널을 설정
mChannel.setDescription(description);
mChannel.setShowBadge(false);
mNotificationManager.createNotificationChannel(mChannel);
알림 제거
알림은 다음 중 하나가 발생할 때까지 계속 표시된 상태로 유지됩니다.
- 사용자가 개별적으로 삭제하거나 "모두 삭제"를 사용하여 알림을 무시합니다( 알림을 지울 수 있는 경우).
- 사용자가 알림을 클릭하고, 알림을 생성했을 때
setAutoCancel()
을 호출했을 경우입니다. - 특정 알림 ID에 대해
cancel()
을 호출합니다. 이 메서드도 현재 진행 중인 알림을 삭제합니다. cancelAll()
을 호출합니다. 이것은 이전에 발행한 알림을 모두 제거합니다.