상세 컨텐츠

본문 제목

[안드로이드 코틀린] Notification 알림창에 액션기능 추가하는 방법

안드로이드

by aries574 2022. 7. 29. 12:43

본문


이번 시간에는 Notificaton 알림창에 액션 버튼을 추가해서 Activity로 이동하는 방법을 알아보겠습니다. 

이전 포스팅에 이어서 만들었습니다. 이전 포스팅은 아래 링크에 들어가시면 됩니다.

2022.07.28 - [안드로이드] - [안드로이드 코틀린] Notification 간단한 알림 띄우기

 

[안드로이드 코틀린] Notification 간단한 알림 띄우기

이번 시간에는 Notification을 이용해서 상태 표시줄에 알림을 띄어주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. Notification 클래스 만들기 3. 메인 화면 구현 activity_main.xml 4. 메인 코..

aries574.tistory.com


목차

1. 실행 화면
2. YesActivity Activity 
3. NoActivity Activity 
4. NotificationHelper 
5. 메인 코드 MainActivity


1. 실행 화면

 


2. YesActivity Activity 

- 설명 -

액션 버튼에 쓰일 Activity

activity_yes.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".YesActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="YesActivity"
        android:textSize="30sp"/>
</RelativeLayout>

 

YesActivity.kt

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

        val notificationManager: NotificationManager =
        getSystemService(NOTIFICATION_SERVICE) as NotificationManager

        //알림창 닫기
        notificationManager.cancel(1)
    }
}


3. NoActivity Activity 

- 설명 -

액션 버튼에 쓰일 Activity

activity_no.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NoActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="NoActivity"
        android:textSize="30sp"/>
</RelativeLayout>

 

NoActivity.kt

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

        val notificationManager: NotificationManager =
            getSystemService(NOTIFICATION_SERVICE) as NotificationManager

        //알림창 닫기
        notificationManager.cancel(1)
    }
}

 


4. NotificationHelper 

- 설명 -

1. Notification 설정 클래스

2 .addAction(R.drawable.ic_launcher_background, "Yes", yesPendingIntent)

 addAction을 이용해서 액션버튼을 만들 수 있다.

class NotificationHelper(base: Context?) : ContextWrapper(base) {
    
    //채널 변수 만들기
    private val channelID: String = "channelID"
    private val channelNm: String = "channelName"
    private val context: Context? = base


    init {
        //안드로이드 버전이 오레오보다 크면
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){

            //채널 생성
            createChannel()
        }
    }

    //채널 생성 함수
    private fun createChannel(){

        //객체 생성
        val channel: NotificationChannel =
            NotificationChannel(channelID, channelNm, NotificationManager.IMPORTANCE_DEFAULT)

        //설정
        channel.enableLights(true) //빛
        channel.enableVibration(true) //진동
        channel.lightColor = Color.RED
        channel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE

        //생성
        getManager().createNotificationChannel(channel)
    }

    //NotificationManager 생성
    fun getManager(): NotificationManager {

        return getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    }

    //Notification 설정
    fun getChannelNotification(title: String, message: String): NotificationCompat.Builder{

        //액션에 들어갈 액티비티 설정
        //MainActivity 설정
        val mainIntent: Intent = Intent(context, MainActivity::class.java)
        mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)

        val mainPendingIntent: PendingIntent =
            PendingIntent.getActivity(context, 0, mainIntent, PendingIntent.FLAG_ONE_SHOT)


        //YesActivity 설정
        val yesIntent: Intent = Intent(context, YesActivity::class.java)
        yesIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

        val yesPendingIntent: PendingIntent =
            PendingIntent.getActivity(context, 0, yesIntent, PendingIntent.FLAG_ONE_SHOT)

        //NoActivity 설정
        val noIntent: Intent = Intent(context, NoActivity::class.java)
        noIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

        val noPendingIntent: PendingIntent =
            PendingIntent.getActivity(context, 0, noIntent, PendingIntent.FLAG_ONE_SHOT)


        return NotificationCompat.Builder(applicationContext, channelID)
            .setContentTitle(title) //제목
            .setContentText(message)//내용
            .setSmallIcon(R.drawable.ic_launcher_background) //아이콘
            .setContentIntent(mainPendingIntent) //기본 설정
            .addAction(R.drawable.ic_launcher_background, "Yes", yesPendingIntent)
            .addAction(R.drawable.ic_launcher_background, "No", noPendingIntent)
    }
}

 

5. 메인 코드 MainActivity

- 설명 -

1. notificationManager.cancel(1)

NotificationManager 객체를 통해 알림창을 닫을 수 있다.

class MainActivity : AppCompatActivity(){

    //Noti 객체 생성
    private lateinit var notificationHelper: NotificationHelper

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

        val notificationManager: NotificationManager =
            getSystemService(NOTIFICATION_SERVICE) as NotificationManager

        //알림창 닫기
        notificationManager.cancel(1)

        //객체 생성
        val titleEdit: EditText = findViewById(R.id.title_edit)
        val messageEdit: EditText = findViewById(R.id.message_edit)
        val notiBtn: Button = findViewById(R.id.noti_btn)

        //Noti 초기화
        notificationHelper = NotificationHelper(this)

        //알림 버튼 이벤트
        notiBtn.setOnClickListener {
            val title: String = titleEdit.text.toString()
            val message: String = messageEdit.text.toString()

            //알림 호출
            showNotification(title, message)
        }
    }//onCreate

    //알림 호출
    private fun showNotification(title: String, message: String){

        val nb: NotificationCompat.Builder =
            notificationHelper.getChannelNotification(title, message)

        notificationHelper.getManager().notify(1, nb.build())
    }

}

2022.07.27 - [안드로이드] - [안드로이드 코틀린] DatePicker 달력 만드는 방법

 

[안드로이드 코틀린] DatePicker 달력 만드는 방법

이번 시간에는 DatePicker를 이용해서 달력 만드는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구현 activity_main.xml 3. 메인 코드 구현 MainActivity.kt 1. 실행 화면 2. 메..

aries574.tistory.com

2022.07.26 - [안드로이드] - [안드로이드 코틀린] CalendarView 달력 만드는 방법

 

[안드로이드 코틀린] CalendarView 달력 만드는 방법

이번 시간에는 CalendarView를 이용해서 달력을 만드는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구현 activity_main.xml 3. 메인 코드 구현 MainActivity.kt 1. 실행 화면 2. 메..

aries574.tistory.com

2022.07.25 - [안드로이드] - [안드로이드 코틀린] 스위치(Switch) On, Off 만드는 방법

 

[안드로이드 코틀린] 스위치(Switch) On, Off 만드는 방법

이번 시간에는 스위치(Switch)를 통해 두 개의 상태 값 ON, OFF 만드는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 구현 activity_main.xml 3. 메인 코드 구현 MainActivity.kt 1...

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역