알림 띄우기
알림 객체
알림 객체 알림 빌더를 만들었으면 이 빌더를 이용해 Notification 객체를 만들어야 합니다. 이 객체에 출력할 이미지, 문자열 등의 정보를 담습니다. 앱에서 알림이 발생하면 상태 바에 이미지가 출력됩니다. 이를 스몰 아이콘이라 부릅니다. 상태 바의 알림 이미지 그리고 상태 바를 끌어내린다면 알림 정보를 확인할 수 있습니다. 알림은 스몰 아이콘과 발생 시각, 제목 내용 등으로 구성되며, 이러한 알림 정보를 Noti fication 객체에 설정해야 합니다.
빌더의 세터 함수를 이용해 알림의 구성 정보를 설정
builder.setSmallIcon(android.R.drawable.ic_notification_overlay)
builder.setWhen(System.currentTimeMillis()
builder.setContentTitle("Content Title")
builder.setContentText("Content Massage")
NotificationManager 클래스의 notify() 함수를 이용하여 알림 발생
manager.notify(11, builder.build())
builder.build() 함수가 Notification 객체를 만들고 이로써 알림이 발생합니다. 첫 번째 매개 변숫값은 알림을 식별하는 데 사용하는 숫자이고 개발자가 임의로 지정합니다. 이 식별 값 은 사용자 폰에 발생한 알림을 코드에서 취소할 때 cancel() 함수를 이용하여 취소시킬 수 있습니다.
manager.cancel(11)
터치나 스와이프를 하게 되며 알림이 사라지지 만 터치나 스와이프를 하더라도 알림이 사라지지 않게 하려면 빌더의 세터 함수로 지정하면 알림이 사라지지 않게 할 수 있습니다.
builder.setAutoCancel(false) //알림을 터치할 때 이벤트는 발생하지만 알림이 사라지지 는 않습니다.
builder.setOngoing(true) // 사용자가 알림을 스와이프해도 사라지지 않습니다.
2가지를 모두 설정했다면 사용자가 알림을 취소할 수 없으며 취소할 수 있는 방법은 cancel() 함수밖에 없습니다.
참고
https://developer.android.com/reference/android/app/NotificationManager
알림 구성
알림 터치 이벤트
사용자가 알림을 터치하면 앱의 액티비티 또는 브로드캐스트 리시버를 실행해야 하는데 이 를 실행하려면 인텐트를 준비해야 합니다. 인텐트를 준비한 후 Notification 객체에 담아서 이벤트가 발생할 때 인텐트를 실행해 달라고 시스템에 의뢰해야 합니다. 이러한 의뢰는 PendingIntent 클래스를 이용합니다.
static fun getActivity(context: Context!, requestCode: Int, intent: Intent!, flags: Int): PendingIntent!
static fun getBroadcast(context: Context!, requestCode: Int, intent: Intent!, flags: Int): PendingIntent!
static fun getService(context: Context!, requestCode: Int, intent: Intent, flags: Int): PendingIntent!
PendingIntent 클래스는 컴포넌트별로 실행을 의뢰하는 함수를 제공합니다. 각 함수의 세 번째 매개변수에 인텐트 정보를 등록합니다. 네 번째 매개변수는 flag값으로 똑같은 알림이 발생했을 때 어떻게 처리해야 하는지를 나타냅니다. 여기에 입력할 상수 변수로는 FLAG_IMMUTABLE, FLAG_CANCEL_CURRENT, FLAG_MUTABLE, FLAGE_NO_CREATE, FLAG_ONE_SHOW, FLAG_UPDATE_CURRENT 가운데 하나를 지정하여 사용합니다.
알림을 터치했을 때 DetailActivity라는 액티비티의 실행 정보를 Notification 객체에 등록하는 코드
val intent = Intent(this, DetailActivity::class.java)
val pending Intent = Pending Intent.getActivity(this, 10, intent,Pending Intent.FLAG_IMMUTABLE)
builder.setContentIntent(pendingIntent) // 터치 이벤트 등록
참고
https://developer.android.com/reference/android/app/PendingIntent