책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.
본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
19장. 브로드캐스트 리시버와 알림
19.2.2. NotificationChannel (Android Oreo 추가사항)
Notification 객체는 직접 생성되지 않으며 NoficationCompat.Builder로 생성합니다.
그런데 Android Oreo (API Level 26)부터는 Builder를 만드는 방법이 변경되었습니다.
NotificationChannel이라는 개념이 추가되었으며 NotificationChannel에 의해서 Builder가 생성되게 변경되었습니다. API Level 26부터 추가된 개념으로 26 이상의 스마트폰을 목적으로 앱이 개발된다면 NotificationChannel을 적용해 주어야 합니다.
NotificationChannel은 일종의 알림에 대한 관리 단위로 생각하면 됩니다. NotificationChannel에 대해 이해하기 위해 먼저 이전 버전에서의 Notification에 대해 살펴보겠습니다. 그림 19-11은 API Level 25 버전에서 알림이 발생한 예입니다. 사용자가 알림을 오른쪽으로 밀면 설정 아이콘이 나타나는데, 설정 아이콘을 클릭하면 알림에 대해 설정할 수 있습니다.
앱의 알림 설정에서 사용자가 앱의 알림을 차단하거나 소리 등이 발생하지 않게 설정할 수 있습니다.
그리고 <MORE SETTINGS>를 누르면 스마트폰의 환경설정으로 이동합니다.
스마트폰의 환경설정에서 각각의 앱을 위한 알림 설정을 제공하고 있습니다. 여기까지는 API Level 25 버전, 즉 Android Nougat의 내용입니다. 이번에는 API Level 26, 즉 Android Oreo에서의 변경사항을 살펴보겠습니다.
API Level 26부터는 체널이라는 개념이 추가되었습니다. 개발자가 알림을 발생시킬 때 적용해야 하는 개념이며, 체널은 간단하게 앱의 알림에 대한 관리 단위 정도로 이해하면 됩니다. 즉, 앱의 알림을 각 체널로 좀 더 세분하여 관리할 수 있다는 이야기입니다.
그림 19-14는 API Level 26 버전의 AVD 화면입니다. 알림을 발생시키고 사용자가 알림을 오른쪽으로 밀었을 때의 화면입니다. 아이콘이 두 개 나오는데요. 왼쪽은 스누즈 (Snoozed) 아이콘으로 잠깐 동안 알림을 받지 않게 설정할 때 사용합니다.
스누즈 아이콘을 클릭하면 사용자가 시간을 설정할 수 있으며 이 기간 동안 앱에서 알림을 발생시키더라도 사용자 스마트폰에는 알림이 발생하지 않습니다.
그림 19-16은 알림에서 설정 아이콘을 눌렀을 때의 화면입니다. 이곳에서 <MORE SETTINGS>를 눌러 환경설정으로 갈 수 있습니다.
앱의 알림을 위한 환경설정을 보면 Categories 부분에 두 개의 채널이 보입니다. 즉 이 앱에서는 알림을 위한 채널이 두 개로 분리되어 있는 상황입니다. 사용자는 이제 각 채널에 대한 알림을 따로 설정할 수 있습니다.
그림 19-18처럼 각 채널 안에서 채널에 대한 진동, 알림음 등을 설정할 수 있습니다.
이제 채널을 적용해 알림을 발생시키는 방법에 대해 살펴보겠습니다. NotificationChannel은 API Level 26부터 제공되므로 하위 버전에서 실행되지 않게 Build.VERSION.SDK_INT를 이용하여 버전 분기 프로그램을 작성해야 합니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
String channelId = "one-channel";
String channelName = "My Channel One";
String channelDescription = "My Channel One Description";
NotificationChannel channel = new NotificationChannel(channelId, channelName,
NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription(channelDescription);
//각종 채널에 대한 설정
channel.enableLights(true);
channel.setLightColor(Color.RED);
channel.enableVibration(true);
channel.setVibrationPattern(new long[]{100, 200, 300});
manager.createNotificationChannel(channel);
//channel이 등록된 builder
builder = new NotificationCompat.Builder(this, channelId);
} else {
builder = new NotificationCompat.Builder(this);
}
Builder를 이용하여 Notification을 만들고 NotificationManager로 알림을 발생시키는 구조는 동일한데 API Level 26 이상의 폰을 목적으로 한다면 Builder 생성 시 NotificationChannel을 등록해 주어야 합니다. builder = new NotificationCompat.Builder(this, channelId);에 의해 Builder가 만들어지므로 Builder 생성 이전에 위의 코드처럼 NotificationChannel을 준비하여 적용해 주면 됩니다.
'Android' 카테고리의 다른 글
[깡샘의 안드로이드 프로그래밍] 정리 23 - 주소록 데이터 획득 (0) | 2018.01.06 |
---|---|
[깡샘의 안드로이드 프로그래밍] 정리 22 - ActivityManager (1) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 20 - persistent bottom sheet (0) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 19 - RecyclerView (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 18 - AsyncTask (0) | 2018.01.05 |