안드로이드 개발자라면 한번씩은 해봤을 Notification에 대해 정리해보겠습니다.
간략히 말하자면 Notification은 사용자에게 앱의 이벤트에 대한 정보를 제공하고, Builder를 통해서 생성해야합니다.
NotificationChannel은 각 Notification들을 관리하는 것이라 생각하면 되는데, API 26 이상부턴 반드시 추가를 해줘야 Notification을 발생시킬 수 있습니다.
예제를 통해 더 자세히 알아보겠습니다
1. NotificationChannel 생성
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel("ID", "채널명", NotificationManager.IMPORTANCE_HIGH)
notificationChannel.enableVibration(true)
notificationChannel.lightColor = Color.RED
notificationChannel.description = "Description"
notificationManager.createNotificationChannel(notificationChannel)
}
NotificationChannel("ID", "채널명", NotificationManager.IMPORTANCE_HIGH) : 고유 ID, 사용자가 볼 수 있는 채널명, 중요도 수준 이 3가지를 매개변수로 채널을 설정
notificationChannel.description : 사용자에게 표시될 설명을 표시
notificationChannel.enableVibration : 채널에서 진동, 소리 등을 설정
notificationManager.createNotificationChannel(notificationChannel) : 채널을 등록
2. NotificationCompat.Builder 생성
위에서 생성한 채널을 사용해서 실제로 노티를 발생시켜보겠습니다
노티를 터치했을 때 화면 이동을 위해 PendingIntent도 사용해서 만들어주겠습니다
val intent = Intent(contexet, 이동할 액티비티::class.java)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
val title = "노티 제목"
val noti = NotificationCompat.Builder(context, 노티ID)
.setContentTitle(title)
.setContentText("타이틀 아래에 표시되는 내용")
.setSmallIcon(R.drawable.아이콘명칭)
.setSound(null)
val manager = NotificationCompat.from(this)
manager.notify(노티ID, noti.build())
각 소스에 지정해야하는 변수들은 한글로 설명을 표시해두었습니다 참고하시길 바랍니다
Builder에서도 지정할 수 있는 속성들이 많기 때문에 더 많은 참조는 공식문서를 통해 보시길 바랍니다
위에서 Notification을 생성하는 방법에 대해 알아봤습니다.
그 중 중요도에서 Deprecated된 부분이 있어서 이어서 정리해보겠습니다.
API 26 이상에서는 중요도에서
Notification.PRIORITY_HIGH가 deprecated 되었습니다
HIGH뿐만 아니라 PRIORITY_DEFAULT, PRIORITY_LOW, PRIORITY_MIN, PRIORITY_MAX가 전부 Deprecated 되었습니다.
그러므로 API 26 이상에서는 각각의 중요도를 NotificationManager.IMPORTANCE_*** 로 변경시킵니다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationBuilder.setPriority(NotificationManager.IMPORTANCE_HIGH)
} else {
notificationBuilder.setPriority(Notification.PRIORITY_HIGH) }
API 버전별로 중요도를 나눠서 설정하면 됩니다.
궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊
'📱 Android' 카테고리의 다른 글
[Android] OS 점유율 & minSdkVersion (0) | 2021.01.27 |
---|---|
[Android] SharedPreferences 사용하기 (0) | 2021.01.19 |
[Android] Timber 사용해보기 (0) | 2020.12.29 |
[Android/kotlin] LayoutInflater 사용 (PopupWindow) (0) | 2020.12.22 |
[Android] getColor, getDrawable Deprecated 대응 (0) | 2020.11.18 |