스마트폰 화면 상단의 상태 바에는 배터리, 네트워크 상태, 시간 등의 시스템 상태 정보가 출력된다. 이 상태 바에 앱의 정보를 출력하는 것을 알림(Nofitication)이라고 한다.

일반적으로 상태 바는 시스템에서 관리하기 때문에 앱이 직접 제어할 수 없다. 대신 시스템에 의뢰하면 앱의 알림정도는 출력할 수 있다.
앱의 화면 구성이나 이벤트 처리하는 것과는 구조가 다르기 때문에 이 알림을 위해 제공되는 API를 사용해야 한다.

NotificationManager.notify() 를 통해 알림이 발생notify() 함수에는 NotificationCompat.Builder 가 만드는 Notification 객체를 대입하여 알림 정보가 저장NotificationCompat.Builder 를 만들 때 NotificationChannel 정보를 대입만드는 순서는 위에서 구조를 파악했을 때와 동일하다.
1. NotificationChannel 로 알림 채널을 생성
2. 만들어진 채널 정보를 대입해 NotificationCompat.Builder 를 만들고 이 빌더로 Notification 객체를 생성
3. 만들어진 Notification 객체를 NotificationManager 의 notify() 함수에 대입
API 레벨 26 이전에서 사용된 생성자는 Builder(context: Context!) 이다. 이 때까지는 빌더를 만들 때 NotificationChannel 의 정보가 필요 없었다. 26 이후부터 deprecated 되었다.
API 26부터 채널이 추가되었다. 채널이 생기면서 앱의 알림을 채널별로 구분할 수 있게 되었다. API 26 이전에는 채널이 없었기 때문에 앱을 알림을 안 받겠다 하면 해당 앱의 모든 알림이 발생하지 않았다.
API 26 이후부터는 채널이 도입되면서 여러 개의 채널을 생성했을 때 채널별로 알림을 설정할 수 있게 되었다.
NotificationChannel(id: String!, name: CharSequence!, importance: Int)
id: String! : 채널의 식별값name: CharSequence! : 설정 화면에 표시할 채널 이름importance: Int : 해당 채널에서 발생하는 알림의 중요도
채널의 각종 정보는 함수나 프로퍼티로 설정할 수 있다.
fun setDescription(description: String): Unit : 설정 화면에서 채널을 설명하는 문자열fun setShowBadge(showBadge: Boolean): Unit : 홈 화면의 아이콘에 확인하지 않은 알림 개수가 표시되는 배지 아이콘 출력 여부. 숫자는 자동으로 표시fun setSound(sound: Uri!, audioAttributes: AudioAttributes!): Unit : 알림음 재생fun enableLights(lights: Boolean): Unit : 불빛 표시 여부fun setLightColor(argb: Int): Unit : 불빛이 표시된다면 불빛의 색상fun enableVibration(vibration: Boolean): Unit : 진동을 울릴지 여부fun setVibrationPattern(vibrationPattern: LongArray!): Unit : 진동을 울린다면 진동의 패턴위 함수들은 아래처럼 Notification.Builder 를 통해 사용한다.

알림 빌더를 만들었으니 앞에서 구조를 설명한대로 Notification 객체를 만들어야 한다.
Notification 객체
스몰 아이콘, 발생 시각, 제목, 내용 등으로 구성된다. 이 구성 요소들은 Notification 객체에 설정해야 한다.
알림의 정보들이 설정되는 함수들이다.

setSmallIcon() : 스몰 아이콘의 이미지 지정setWhen() : 알림 발생 시각 설정setContentTitle() : 알림 제목setContentText() : 알림 내용이제 NotificationManager 클래스의 notify() 함수를 이용해 알림을 띄우면 된다.
notify() 함수를 살펴보면

동일한 ID의 알림이 앱에 의해 이미 게시되고 아직 취소되지 않은 경우 업데이트된 정보로 대체된다. 구분하기 위해 ID 값을 쓴다. 임의로 지정하면 되기 때문에 개발자가 구분 가능하면 된다.
위에서 사용한 ID 값을 이용해 발생한 알림을 취소할 때도 사용하는데 cancel() 함수에 해당 ID 값을 전달한다.
알림 취소는 보통 2가지로 이뤄진다.

setAutoCancel() : 알림을 터치할 때 이벤트가 발생하지만 알림이 사라지지 않음setOngoing() : 사용자가 알림을 스와이프해도 사라지지 않음다음 포스트에서 알림에서 자주 사용되는 구성 요소들을 알아보겠다.