티스토리 뷰
알림 창에 메시지를 띄우는 것입니다.
Notification Channel
먼저 안드로이드 파이부터 추가된 Channel을 사용해야 합니다.
private fun createNotificationChannel(id :String, name :String) : NotificationCompat.Builder{
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH)
manager.createNotificationChannel(channel)
NotificationCompat.Builder(this, id)
} else {
NotificationCompat.Builder(this)
}
}
버전에 따라 channel을 생성해주거나 생성해주지 않는 코드입니다.
NotificationManager.createNotificationChannel을 통해 channel을 생성할 수 있습니다.
아래의 파라미터만 전달해 주면 됩니다.
- Channel Id - 고유한 id 값을 설정합니다.
- Channel Name - 채널의 이름을 설정합니다.
- Channel Importance - 중요도를 설정합니다. DEFAULT와 HIGH가 있습니다.
Notification 코드
아래와 같이 코드를 작성해 주었습니다.
val builder = createNotificationChannel("id", "name")
.setTicker("Ticker")
.setSmallIcon(android.R.drawable.ic_menu_search)
.setNumber(100)
.setAutoCancel(true)
.setContentTitle("Content Title")
.setContentText("Content Text")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
with(NotificationManagerCompat.from(this)) {
notify(0, builder.build())
}
builder 부분은 Notification의 모양을 설정하는 부분입니다.
setAutoCancel이 true일 경우 Notification을 클릭하면 사라지고 false면 사라지지 않습니다.
NotificationManagerCompat.from(this). notify 안에는 id와 notification을 받습니다.
id는 고유한 번호를 넣어주면 되고, Notification에는 만든 builder를 넣어주면 됩니다.
id가 같으면 1개의 Notification만 생성됩니다. 즉, id를 같게 설정하면 다른 Notification가 실행 중일 때 취소할 수 있습니다.
실행을 하면 아래와 같습니다.
Pending Intent
Notification을 통해 특정 activity로 이동시키거나 데이터를 전달할 수 있습니다.
button2.setOnClickListener {
val intent = Intent(this, MainActivity2::class.java)
val pendingIntent = PendingIntent.getActivity(this, 0, intent, 0)
val builder = createNotificationChannel("id2", "name2")
.setTicker("Ticker 2")
.setSmallIcon(android.R.drawable.ic_menu_search)
.setNumber(100)
.setAutoCancel(true)
.setContentTitle("Content Title 2")
.setContentText("Content Text 2")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)
with(NotificationManagerCompat.from(this)) {
notify(1, builder.build())
}
}
PendingIntent.getActivity를 통해 activity를 설정해주고, setContentIntent로 pendingIntent를 builder에 등록시킵니다.
실행하면 아래와 같이 동작합니다.
Notification을 클릭하면 다른 Activity를 보여주는 것을 확인할 수 있습니다.
BigText Style
Notification을 접고 펼치고 싶을 때 사용합니다.
아래와 같이 사용하면 됩니다.
button3.setOnClickListener {
val text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
val style = NotificationCompat.BigTextStyle().bigText(text)
val builder = createNotificationChannel("id3", "name3")
.setTicker("Ticker 3")
.setSmallIcon(android.R.drawable.ic_menu_search)
.setNumber(100)
.setAutoCancel(true)
.setContentTitle("Content Title 3")
.setContentText("Content Text 3")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setStyle(style)
with(NotificationManagerCompat.from(this)) {
notify(3, builder.build())
}
}
NotificationCompat.BigTextStyle()을 사용하여 bigText를 적용하고, setStyle로 style를 적용하면 됩니다.
BigPicture Style
사진을 보여주는 Notification을 만들 수 있습니다.
button4.setOnClickListener {
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.spagetti)
val style = NotificationCompat.BigPictureStyle().bigPicture(bitmap)
val builder = createNotificationChannel("id4", "name4")
.setTicker("Ticker 4")
.setSmallIcon(android.R.drawable.ic_menu_search)
.setNumber(100)
.setAutoCancel(true)
.setContentTitle("Content Title 4")
.setContentText("Content Text 4")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setStyle(style)
with(NotificationManagerCompat.from(this)) {
notify(4, builder.build())
}
}
BitmapFactory.decodeResource을 통해 이미지를 bitmap으로 변환해줍니다.
NotificationCompat.BigPictureStyle(). bigPicture을 통해 bigPicture을 적용시켜줍니다.
실행하면 아래와 같이 동작합니다.
Inbox Style
많은 양의 데이터를 쉽게 표현할 수 있는 Notification입니다.
button5.setOnClickListener {
val style = NotificationCompat.InboxStyle()
style.addLine("first")
style.addLine("second")
style.addLine("third")
style.addLine("four")
style.addLine("five")
style.addLine("six")
style.addLine("seven")
val builder = createNotificationChannel("id5", "name5")
.setTicker("Ticker 5")
.setSmallIcon(android.R.drawable.ic_menu_search)
.setNumber(100)
.setAutoCancel(true)
.setContentTitle("Content Title 5")
.setContentText("Content Text 5")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setStyle(style)
with(NotificationManagerCompat.from(this)) {
notify(5, builder.build())
}
}
Notification style에서는 위의 예제뿐만 아니라
음악 스타일의 media style,
채팅 스타일의 message style,
바로 답장을 할 수 있는 inline style 등이 있고
head up notifiation을 통해 전면에 notifiation을 띄울 수 있습니다.
'알려주는 이야기 > 안드로이드' 카테고리의 다른 글
안드로이드 Thread (0) | 2020.08.20 |
---|---|
안드로이드 권한 (0) | 2020.08.19 |
안드로이드 action bar (0) | 2020.08.17 |
안드로이드 context menu (0) | 2020.08.16 |
안드로이드 popup menu (0) | 2020.08.15 |