이번 시간에는 알림 창의 내용을 사용자가 선택한 시간이 보여지도록 데이터 전달하는 방법을 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
- 설명 -
1. intent.putExtra("time", curTime)
intent를 전달할 때, 데이터(시간)도 담아서 전달한다.
class MainActivity : AppCompatActivity(), TimePickerDialog.OnTimeSetListener {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//binding 초기화
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
//알람 설정
binding.timeBtn.setOnClickListener {
var timePicker = TimePickerFragment()
//시계 호출
timePicker.show(supportFragmentManager, "Time Picker")
}
//알람 취소
binding.alarmCancelBtn.setOnClickListener {
// 알람 취소 함수
cancleAlarm()
}
}
//시간 정하면 호출되는 함수
override fun onTimeSet(timePicker: TimePicker?, hourOfDay: Int, minute: Int) {
var c = Calendar.getInstance()
//시간 설정
c.set(Calendar.HOUR_OF_DAY, hourOfDay) //시
c.set(Calendar.MINUTE, minute)//분
c.set(Calendar.SECOND, 0)//초
//화면에 시간 지정
updateTimeText(c)
//알람 설정
startAlarm(c)
}
//화면에 시간 지정
private fun updateTimeText(c: Calendar) {
var curTime = DateFormat.getTimeInstance(DateFormat.SHORT).format(c.time)
binding.timeText.append("알람 시간: ")
binding.timeText.append(curTime)
}
//알람 설정
private fun startAlarm(c: Calendar){
//알람매니저 선언
var alarmManager: AlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
var intent = Intent(this, AlertReceiver:: class.java)
//데이터 담기
var curTime = DateFormat.getTimeInstance(DateFormat.SHORT).format(c.time)
intent.putExtra("time", curTime)
var pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0)
//설정 시간이 현재시간 이전이면 +1일
if(c.before(Calendar.getInstance())){
c.add(Calendar.DATE, 1)
}
alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.timeInMillis, pendingIntent)
}
//알람 취소
private fun cancleAlarm(){
//알람매니저 선언
var alarmManager: AlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
var intent = Intent(this, AlertReceiver:: class.java)
var pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0)
alarmManager.cancel(pendingIntent)
binding.timeText.text = "알람 취소"
}
}
- 설명 -
1. var time = intent?.extras?.getString("time")
notificationHelper.getChannelNotification(time)
intent에 담긴 데이터를 꺼내 getChannelNotification 함수에 전달한다.
class AlertReceiver: BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
var notificationHelper: NotificationHelper = NotificationHelper(context)
//넘어온 데이터
var time = intent?.extras?.getString("time")
var nb: NotificationCompat.Builder = notificationHelper.getChannelNotification(time)
//알림 호출
notificationHelper.getManager().notify(1, nb.build())
}
}
- 설명 -
1. getChannelNotification(time: String?)
. setContentTitle(time)
2. 리시브에서 전달한 데이터를 파라미터 추가해서 전달받아 제목 설정 부분에 넣어준다.
class NotificationHelper(base: Context?) : ContextWrapper(base) {
private val channelID = "channelID"
private val channelNm = "channelNm"
init {
//안드로이드 버전이 오레오거나 이상이면 채널 생성
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
//채널 생성
createChannel()
}
}
//채널 생성
private fun createChannel(){
var channel = NotificationChannel(channelID, channelNm,
NotificationManager.IMPORTANCE_DEFAULT)
channel.enableLights(true)
channel.enableVibration(true)
channel.lightColor = Color.GREEN
channel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE
getManager().createNotificationChannel(channel)
}
//NotificationManager 생성
fun getManager(): NotificationManager{
return getSystemService(NOTIFICATION_SERVICE) as NotificationManager
}
//notification 설정
fun getChannelNotification(time: String?):NotificationCompat.Builder{
return NotificationCompat.Builder(applicationContext, channelID)
.setContentTitle(time)
.setContentText("알람입니다.")
.setSmallIcon(R.drawable.ic_launcher_background)
}
}
2022.06.06 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성
2022.06.14 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정
2022.05.24 - [안드로이드] - [안드로이드 코틀린] 조건문 when 만드는 방법
[안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 화면 변경 위치 표시(Indicator) 해주는 방법 (0) | 2022.06.21 |
---|---|
[안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 갤러리 느낌으로 만드는 방법 (5) | 2022.06.20 |
[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part2 - 메인 화면과 메인 액티비티 (0) | 2022.06.18 |
[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정 (0) | 2022.06.17 |
[안드로이드 코틀린] Tab Custom Animation part3 - 탭 애니메이션 적용 (0) | 2022.06.16 |
댓글 영역