1. Pending Intent란?
- Notification 메세지를 통해 어플리케이션의 Activity(화면)를 실행할 수 있는데 이 때 사용하는것이 Pending Intent이다.
- Pending Intent를 통해 실행되는 Activity로 데이터를 전달할 수도 있다.
2. 구성방법
1. Notification 빌더 생성
2. Intent 생성
- *Intent: 안드로이드 OS에게 저 이거 실행시켜주세요 시키는 것.
- 이 부분에서 설정된 Activity로 이동할 수 있고, data도 보낼 수 있다.
3. pendingIntent에 메세지를 클릭한 후 이동할 Activity 설정
4. NotificationManager에 최종 연결
button3.setOnClickListener { view ->
// 1. 노티피케이션 빌더 생성
var builder = getNotificationBuilder1("pending", "pendingIntent")
builder.setContentTitle("notification 2")
builder.setContentText("알림메세지 2 입니다")
builder.setSmallIcon(R.drawable.images)
builder.setAutoCancel(true)
//2. Intent 생성
// Intent란 안드로이드 OS에게 저 이거 실행시켜주세요 시키는 것
var intent1 = Intent(this, TestActivity2::class.java)
var pending1 = PendingIntent.getActivity(this, 0, intent1, 0)
builder.setContentIntent(pending1)
var notification = builder.build()
var manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.notify(20, notification)
}
3. 메세지 클릭했을 때 열리는 Activity에 Data 전달하기
1. 기본 구성은 위와 같고, Intent에 putExtra를 통해 다른 Activity에 넣어줄 데이터를 세팅해준다.
2. getActivity의 플래그를 꼭 PendingIntent.FLAG_UPDATE_CURRENT로 해준다.
3. 다른 Notification과 같은 Activity를 공유할 경우 PendingIntent.getActivity의 requestCode를 다르게 해줘야 한다.
button4.setOnClickListener { view ->
// 1. 노티피케이션 빌더 생성
var builder = getNotificationBuilder1("pending", "pendingIntent")
builder.setContentTitle("notification 3")
builder.setContentText("알림메세지 3 입니다")
builder.setSmallIcon(R.drawable.images)
builder.setAutoCancel(true)
//2. Intent 생성
// Intent란 안드로이드 OS에게 저 이거 실행시켜주세요 시키는 것
var intent1 = Intent(this, TestActivity1::class.java)
// Notification 눌렀을 때 나오는 Activity에서 데이터를 뽑아쓰기 위해 putExtra.
intent1.putExtra("data1", "문자열 데이터3")
intent1.putExtra("data2", 300)
// 플래그를 꼭 FLAG_UPDATE_CURRENT로 해줘야 데이터가 잘 전달된다.
// requestCode
var pending1 = PendingIntent.getActivity(this, 20, intent1, PendingIntent.FLAG_UPDATE_CURRENT)
builder.setContentIntent(pending1)
var notification = builder.build()
var manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.notify(30, notification)
}
4. 다른 Activity에서 get000Extra()로 데이터를 받아온다.
var data1 = intent.getStringExtra("data1")
var data2 = intent.getIntExtra("data2", 0)
textView.text = "data1 = ${data1} \n"
textView.append("data2 = ${data2}")
4. Action(액션)
- 메세지 당 액티비티를 여러개 지정할 수 있게 하는 기능.
- Notification 메세지 밑에 Action으로 표시되며, 그냥 Notification 누르면 그냥 연결된 Activity, 액션버튼을 누르면 액션에 설정한 Activity로 이동한다.
button2.setOnClickListener { view ->
// 1. 노티피케이션 빌더 생성
var builder = getNotificationBuilder1("pending", "pendingIntent")
builder.setContentTitle("notification 1")
builder.setContentText("알림메세지 1 입니다")
builder.setSmallIcon(R.drawable.images)
builder.setAutoCancel(true)
//2. Intent 생성
// Intent란 안드로이드 OS에게 저 이거 실행시켜주세요 시키는 것
var intent1 = Intent(this, TestActivity1::class.java)
// Notification 눌렀을 때 나오는 Activity에서 데이터를 뽑아쓰기 위해 putExtra.
intent1.putExtra("data1", "문자열 데이터1")
intent1.putExtra("data2", 100)
// 3. 액션 설정
var intent2 = Intent(this, TestActivity2::class.java)
intent2.putExtra("data2", "testactivity2 실행")
var pending2 = PendingIntent.getActivity(this, 100, intent2, PendingIntent.FLAG_UPDATE_CURRENT)
var builder2 = NotificationCompat.Action.Builder(android.R.drawable.ic_menu_compass, "Action 1", pending2)
var action2 = builder2.build()
builder.addAction(action2)
// 플래그를 꼭 FLAG_UPDATE_CURRENT로 해줘야 데이터가 잘 전달된다.
var pending1 = PendingIntent.getActivity(this, 10, intent1, PendingIntent.FLAG_UPDATE_CURRENT)
builder.setContentIntent(pending1)
var notification = builder.build()
var manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.notify(10, notification)
}
'Deperecated > Android_강의' 카테고리의 다른 글
안드로이드 - 권한 및 쓰레드 (0) | 2020.02.14 |
---|---|
안드로이드 - Style Notification (0) | 2020.02.14 |
안드로이드 - Notification (0) | 2020.02.14 |
안드로이드 - 다이얼로그 (0) | 2020.02.13 |
안드로이드 - 메시징 - Toast (0) | 2020.02.13 |