오늘은 알림(Notificatio)을 알아볼까 합니다
알림은 사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정보를 적시에 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지입니다. 사용자는 알림을 탭 하여 앱을 열거나 알림에서 바로 특정 작업을 실행할 수 있습니다.
공식 안드로이드 docs를 보면 알림을 이렇게 설명하고 있습니다. 알림은 여러 방식으로 사용자에게 여러 정보들을 표시하거나 동작(event)들을 수행할 수 있게 해 줍니다.
기존에 안드로이드에서는 알림 채널을 따로 만들어 줄 필요 없이 알림을 구현할 수 있었지만 안드로이드 API26 오레오 버전부터는 따로 Notification Channel을 추가를 해줘야 합니다.
이처럼 Notification에 Channel이 추가된 이유는 소규모 애플리케이션에서 대규모 애플리케이션이 되면서 앱에서도 여러 종류의 알림이 생겨났습니다. 이경우 앱에서 알림을 끄게 될 경우 모든 알림이 꺼지게 됩니다. 그렇다면 지금처럼 채널이 생기면 어떻게 될까요? 보고 싶은 알림만 켜놓을 수 있게 됩니다.
private const val NOTIFICATION_ID = 11
private const val CHANNEL_ID = "default"
//.....
notificationImgaeView.setOnClickListener {
//todo 알림 기능
val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
val builder: NotificationCompat.Builder
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8.0
val channel = NotificationChannel(
CHANNEL_ID, "default channel",
NotificationManager.IMPORTANCE_DEFAULT
).apply {
description = "description text of this channel."
setShowBadge(true)
val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val audioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build()
setSound(uri, audioAttributes)
enableVibration(true)
}
// 채널을 NotificationManager에 등록
manager.createNotificationChannel(channel)
builder = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
} else {
builder = NotificationCompat.Builder(this@MainActivity)
}
builder.run {
setSmallIcon(R.mipmap.ic_launcher)
setWhen(System.currentTimeMillis())
setContentTitle("키워드 알림")
setContentText("설정한 키워드에 대한 알림이 도착했습니다!!")
setStyle(
NotificationCompat.BigTextStyle()
.bigText("설정한 키워드에 대한 알림이 도착했습니다!!")
)
}
manager.notify(NOTIFICATION_ID, builder.build())
}
위 코드는 알림을 만드는 코드입니다. 이 코드를 보면 알림 ID와 채널 ID가 있을 것입니다. 위에서 채널은 배웠으니 알 것입니다. 그렇다면 알림은 무엇일까요? 말 그대로 알림의 고유 키값입니다.
만약 같은 키값으로 준다고 하고 서로 다른 제목을 가진 알림을 호출한다면 가장 마지막으로 준 알림만 보일 것입니다.
반대로 서로 다른 키를 가진다면 이렇게 각각의 알림으로 따로 보입니다. 이처럼 상황에 맞게 아이디값들을 쓴다면 더욱 좋은 앱을 만들 수 있을 것 같습니다.
참고
https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ko
https://velog.io/@thevlakk/Android-Notification-ID%EC%99%80-Channel-ID-%EC%B0%A8%EC%9D%B4
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/Kotlin] 알림(Notification) - 1, NotificationChannel 속성 (2) | 2023.09.01 |
---|---|
[Android/Kotlin] 리사이클러뷰(RecyclerView) 스크롤 이벤트 (2) | 2023.08.31 |
[Android/Kotlin] 뷰 바인딩(ViewBinding) (2) | 2023.08.28 |
[Android/Kotlin] 리사이클러뷰(RecyclerView) 어댑터 이야기 (0) | 2023.08.08 |
[Android/Kotlin] ActivityResultLauncher는 무었일까요? (0) | 2023.08.07 |