Open otcroz opened 2 years ago
NotificationReceiver.kt
package com.example.travelcultureapplicaiton
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.RemoteInput
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.media.AudioAttributes
import android.media.RingtoneManager
import android.os.Build
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationCompat
import com.example.travelcultureapplicaiton.Constant.Companion.CHANNEL_ID
import com.example.travelcultureapplicaiton.Constant.Companion.NOTIFICATION_ID
class Constant {
companion object {
// 아이디 선언
const val NOTIFICATION_ID = 0
const val CHANNEL_ID = "notification_channel"
// 알림 시간 설정
const val ALARM_TIMER = 5
}
}
class NotificationReceiver : BroadcastReceiver() {
lateinit var notificationManager: NotificationManager
override fun onReceive(context: Context, intent: Intent) {
//알림을 부르면 상태 창의 알림이 없어진다. => mamager.cancel을 했기 때문
//브로드캐스트 리시버의 경우 context를 앞에 붙인다.
val notificationManager = context.getSystemService(AppCompatActivity.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancel(NOTIFICATION_ID) // MainActivity에서 작성했던 임의의 숫자와 같은 숫자를 입력한다.
createNotificationChannel()
deliverNotification(context)
}
private fun createNotificationChannel(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel(
CHANNEL_ID, // 채널의 아이디
"채널 이름입니다.", // 채널의 이름
NotificationManager.IMPORTANCE_HIGH
)
notificationChannel.enableLights(true) // 불빛
notificationChannel.lightColor = Color.RED // 색상
notificationChannel.enableVibration(true) // 진동 여부
notificationChannel.description = "채널의 상세정보입니다." // 채널 정보
//소리 알림
val uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val audio_attr = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build()
notificationChannel.setSound(uri, audio_attr)
notificationManager.createNotificationChannel(
notificationChannel)
}
}
private fun deliverNotification(context: Context){
val contentIntent = Intent(context, MainActivity::class.java)
val contentPendingIntent = PendingIntent.getActivity(
context,
NOTIFICATION_ID, // requestCode
contentIntent, // 알림 클릭 시 이동할 인텐트
PendingIntent.FLAG_UPDATE_CURRENT
)
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_splash_logo) // 아이콘
.setContentTitle("타이틀 입니다.") // 제목
.setContentText("내용 입니다.") // 내용
.setContentIntent(contentPendingIntent)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_ALL)
notificationManager.notify(NOTIFICATION_ID, builder.build())
}
}
SettingAppFragment.kt