안드로이드 서비스 운영시 많은 앱들이 서버 푸시 알림을 표시하거나 로컬 알림을 설정하기 위해 Notification 을 구현한 경험이 있을겁니다.
저 또한 이번 제 프로젝트인 기억하기 앱 서비스에서 할 일 알림 기능을 구현해보았습니다.
알림 기능을 구현하고 테스트를 하던 와중 제가 생각한 부분과 다르게 동작하는 부분을 확인했습니다.
제가 원한 동작 방식은 원하는 시간에 알림이 왔을 때, 알림창에 아이콘이 표시되며 추가로 기타 다른 앱들과 동일하게 상단에 알림의 내용이 잠시 표시되는 헤드업 알림 동작을 원했습니다.
하지만, 구현했던 내용에는 알림창에 아이콘 표시와 소리/진동 알림만 동작하게 됐습니다.
해당 동작은 Android Developer 의 알림 구현 가이드 문서 중 중요도 수준 설정을 통해 해결할 수 있었습니다.
다음 가이드 문서의 내용을 살펴보겠습니다.

다음과 같이 다섯가지의 중요도 수준을 설정하여 알림이 사용자에게 영향을 주는 방식을 변경할 수 있습니다. 여기서 기획 사항에 맞춰 헤드업 알림 표시를 위해 중요도 수준을 긴급으로 설정해야 한다는 걸 확인할 수 있습니다.
기본적으로 Android 8.0(API 26) 버전 이상부터는 알림 구현을 위해 Channel 을 구현하게 됩니다. 따라서 NotificationChannel을 구성할 때 중요도 수준을 설정할 수 있습니다.
Android 7.1(API 25) 이하 버전에서는 NotificationCompat의 builder 를 설정하여 알림을 구현할 수 있습니다.
아래와 같이 코드를 구성하여 Priority 를 설정합니다.
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val taskChannel = NotificationChannel(
CHANNEL_ID,
CHANNEL_NAME,
NotificationManager.IMPORTANCE_HIGH
)
...
}
}
채널 생성시 NotificationManager.IMPORTANCE_HIGH 로 중요도를 긴급으로 설정합니다.
fun showNotification() {
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(title)
.setContentText(content)
.setPriority(NotificationCompat.PRIORITY_HIGH)
...
}
이전 버전 대응을 위해 setPriority() 에 NotificationCompat.PRIORITY_HIGH 또는 NotificationCompat.PRIORITY_MAX 로 중요도를 긴급으로 설정합니다.
이렇게 설정하면 아래와 같이 정상적으로 헤드업 알림 이 표시되는 것을 확인할 수 있습니다.
