본문 바로가기
안드로이드/메세징

안드로이드 PendingIntent

by 김어찐 2022. 6. 13.
728x90

Notification 메시지를 통해 애플리케이션의 Activity를 실행할 수 있으며 이 때 Pending Intent를 사용한다.
Pending Intent를 통해 실행되는 Activity로 데이터를 전달 할 수 있다.

 

Action

알림 메시지에 Button과 같은 것을 배치하여 이를 눌렀을 때 지정된 Activity를 실행할 수 있다.
안드로이드 4.0 까지는 메시지당 하나의 Activity만 실행이 가능했지만 4.1 이후로 Action이 제공되어 하나의 메시지에서 여러 Activity를 선택적으로 실행할 수 있게 되었다.

 

 

package com.example.pendingintent

import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.Color
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.NotificationCompat
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            val builder1 = getNotificationBuilder("pending","pending intent")
            builder1.setContentTitle("notification 1")
            builder1.setContentText("알림 메시지 1입니다")
            builder1.setSmallIcon(android.R.drawable.ic_menu_search)
            val bitmap = BitmapFactory.decodeResource(resources,R.mipmap.ic_launcher)
            builder1.setLargeIcon(bitmap)

            // 메세지를 터치하면 자동으로 메세지를 제거한다.
            builder1.setAutoCancel(true)

            // 메세지를 터피하면 실행할 Activity를 관리할 Intent 생성
            val intent1 = Intent(this,NotificationActivity1::class.java)
            intent1.putExtra("data1",100)
            intent1.putExtra("data2",200)


            val pending1 = PendingIntent.getActivity(this,10,intent1,PendingIntent.FLAG_UPDATE_CURRENT)
            builder1.setContentIntent(pending1)

            // Action 설정
            val intent2 = Intent(this,NotificationActivity3::class.java)
            val pending2 = PendingIntent.getActivity(this,100,intent2,PendingIntent.FLAG_UPDATE_CURRENT)
            val builder2 = NotificationCompat.Action.Builder(android.R.drawable.ic_menu_compass,"Action 1",pending2)
            val action2 = builder2.build()
            builder1.addAction(action2)

            val intent3 = Intent(this,NotificationActivity4::class.java)
            val pending3 = PendingIntent.getActivity(this,100,intent3,PendingIntent.FLAG_UPDATE_CURRENT)
            val builder3 = NotificationCompat.Action.Builder(android.R.drawable.ic_menu_agenda,"Action 2",pending3)
            val action3 = builder3.build()
            builder1.addAction(action3)



            val notification = builder1.build()
            val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            manager.notify(10,notification)
        }

        button2.setOnClickListener {
            val builder1 = getNotificationBuilder("pending","pending intent")
            builder1.setContentTitle("notification 2")
            builder1.setContentText("알림 메시지 2입니다")
            builder1.setSmallIcon(android.R.drawable.ic_menu_search)
            val bitmap = BitmapFactory.decodeResource(resources,R.mipmap.ic_launcher)
            builder1.setLargeIcon(bitmap)

            // 메세지를 터피하면 실행할 Activity를 관리할 Intent 생성
            val intent1 = Intent(this,NotificationActivity2::class.java)

            val pending1 = PendingIntent.getActivity(this,10,intent1,PendingIntent.FLAG_UPDATE_CURRENT)
            builder1.setContentIntent(pending1)

            val notification = builder1.build()
            val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            manager.notify(20,notification)
        }

    }

    fun getNotificationBuilder(id: String, name: String): NotificationCompat.Builder {
        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)
            channel.enableLights(true)
            channel.lightColor = Color.RED
            channel.enableVibration(true)
            manager.createNotificationChannel(channel)
            val builder1 = NotificationCompat.Builder(this, id)
            return builder1
        } else {
            val builder2 = NotificationCompat.Builder(this)
            return builder2
        }
    }
}

 

 

728x90

'안드로이드 > 메세징' 카테고리의 다른 글

안드로이드 Message Notification  (0) 2022.06.13
안드로이드 다양한 Notification  (0) 2022.06.13
안드로이드 Notification  (0) 2022.06.13
안드로이드 항목 선택 Dialog  (0) 2022.06.13
안드로이드 ListDialog  (0) 2022.06.13