이번 시간에는 Notificaton 알림창에 액션 버튼을 추가해서 Activity로 이동하는 방법을 알아보겠습니다.
이전 포스팅에 이어서 만들었습니다. 이전 포스팅은 아래 링크에 들어가시면 됩니다.
2022.07.28 - [안드로이드] - [안드로이드 코틀린] Notification 간단한 알림 띄우기
- 설명 -
액션 버튼에 쓰일 Activity
<?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>
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)
}
}
- 설명 -
액션 버튼에 쓰일 Activity
<?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>
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)
}
}
- 설명 -
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)
}
}
- 설명 -
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 달력 만드는 방법
2022.07.26 - [안드로이드] - [안드로이드 코틀린] CalendarView 달력 만드는 방법
2022.07.25 - [안드로이드] - [안드로이드 코틀린] 스위치(Switch) On, Off 만드는 방법
[안드로이드 코틀린] 텍스트뷰 TextView 동적으로 생성하는 방법 (0) | 2022.07.31 |
---|---|
[안드로이드 코틀린] TimePicker 내가 선택한 알람 시간 텍스트뷰에 보여주는 방법 (0) | 2022.07.30 |
[안드로이드 코틀린] Notification 간단한 알림 띄우기 (0) | 2022.07.28 |
[안드로이드 코틀린] DatePicker 달력 만드는 방법 (0) | 2022.07.27 |
[안드로이드 코틀린] CalendarView 달력 만드는 방법 (0) | 2022.07.26 |
댓글 영역