알림 띄우기
알림 띄우기
프로그레스
프로그레스 앱에서 어떤 작업이 이루어지는 데 시간이 걸린다면 보통 알림을 이용해 일의 진행 상황을 프로그레스에 바로 알려 줍니다. 대표적인 예가 앱에서 서버로 파일을 올리거나 내려받는 경우입니다.
알림의 프로그레스 바는 화면을 따로 준비하지 않고 빌더에 setProgress() 함수만 추가해 주 면 자동으로 나옵니다.
open fun setProgress(max: Int, progress: Int, indeterminate: Boolean): Notification.Builder
// max: 프로그레스 바의 최댓값
// progress: 진행값
// indeterminatedml 값이 true이 면 프로그레스 바는 왼쪽에서 오른쪽으로 계속 흘러가듯이 표현
현잿값을 지정한 후 스레드 같은 프로그램을 사용해 진행 값을 계속 바꾸면서 상황을 알려 줍니다.
builder.setProgress(100, 0, false)
manager.notify(11, builder.build()
thread {
for (i in 1..100) {
builder.setProgress(100, i, false)
manager.notify(11, builder.build())
SystemClock.sleep(100)
}
}
알림 스타일
알림에 보이는 정보는 기본으로 문자열이지만 그 밖에 여러 가지 스타일을 제공합니다. 이 스타일을 이용하면 문자열 이외에 다양한 콘텐츠로 알림을 구성할 수 있습니다.
큰 이미지 스타일
알림에 큰 이미지를 출력할 때는 BigPicturestyle을 이용합니다.
val bigpicture = BitmapFactory.decodeResource(resources, R.drawable.test)
val bigStyle = NotificationCompat.BigPictureStyle()
bigstyle.bigPicture(bigPicture)
builder.setStyle(bigStyle)
BigPicturestyle 객체의 bigpicture 프로퍼티에 출력할 이미지를 비트맵 형식으로 지정하며, 이렇게 만든 BigPicture 객체를 빌더의 setStyle() 함수에 지정합니다.
긴 텍스트 스타일
긴 문자열 알림은 BigTextStyle을 이용합니다.
val bigTextStyle = NotificationCompat.BigTextStyle()
bigTextStyle.bigText(resources.getString(R.string.long_text))
builder.setStyle(bigTextStyle)
상자 스타일
상자 스타일 상자 스타일 알림은 문자열을 목록으로 출력하는 Inboxstyle을 이용합니다. 하나의 알림에 문자열을 여러 개 나열할 때 유용합니다.
val style = NotificationCompat. Inboxstyle()
style.addLine("1코스 - 수락. 불암산코스")
style.addLine("2코스 - 용마. 아차산코스")
style.addLine("3코스 - 고덕. 일자산코스")
style.addLine("4코스 - 대모. 우면산코스")
builder.setStyle(style)
메시지 스타일
메시지 스타일 알림은 여러 사람이 주고받은 메시지를 구분해서 출력할 때 사용합니다. 메시지 스타일에 보일 메시지는 각각 Message 객체로 표현합니다.
Message(text: CharSequence, timestamp: Long, sender: Person?)
//text : 메시지 내용
//timestamp : 메시지가 발생한 시각
//sender : 알림에 출력될 한 사람의 정보
Person 객체생성
val sender1: Person = Person.Builder()
.setName("kkang")
.setIcon(IconCompat.createWithResource(this, R.drawable.person))
.build
val sender2: Person = Person.Builder()
.setName("kim")
.setIcon(IconCompat.createWithResource(this, R.drawable.person2))
.build()
Person은 API 레벨 28 버전에 추가된 클래스이므로 API 레벨 호환성을 위해 androidx.core.app.Person 라이브러리를 임포트 해야 합니다.
val message1 = NotificationCompat.Messagingstyle.Message(
"hello",
System.currentTimeMillis(),
sender1
)
val message2 = NotificationCompat.Messagingstyle.Message(
"world",
System.currentTimeMillis(),
sender2
)
val messageStyle = NotificationCompat.MessagingStyle(sender)
.addMessage(messagel)
.addMessage(message2)
builder.setStyle(messageStyle)