상세 컨텐츠

본문 제목

[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part2 - 메인 화면과 메인 액티비티

안드로이드

by aries574 2022. 6. 18. 11:28

본문


이번 시간에는 TimePickerDialog 호출하는 클래스와 메인화면, 메인코드를 구현하겠습니다. 

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.06.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

 

[안드로이드 코틀린]정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

사용자가 정한 시간에 알람이 울리게 하는 방법에 대하여 알아보겠습니다. 이번 시간에는 알람 관련 클래스와 설정들을 만들어 보겠습니다. 목차 1. 알람 클래스 만들기 NotificationHelper.kt 2. 

aries574.tistory.com


목차

1. 실행 화면
2. TimePickerDialog 클래스
3. dataBinding 설정
4. 메인 화면 구성 activity_main.xml
5. 메인 코드 구현 MainActivity.kt


1. 실행 화면


2. TimePickerDialog 클래스

- 설명 - 

  시계 호출하는 클래스

class TimePickerFragment: DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

        var c: Calendar = Calendar.getInstance()

        var hour = c.get(Calendar.HOUR_OF_DAY)
        var minute = c.get(Calendar.MINUTE)

        return TimePickerDialog(activity, activity as TimePickerDialog.OnTimeSetListener,
            hour, minute, DateFormat.is24HourFormat(activity))
    }
}


3. dataBinding 설정

build.gradle(Module:프로젝트명:app)

- 설명 - 

 UI 구성요소를 객체 생성없이 사용하기 위해 필요함

    buildFeatures{
        dataBinding = true
    }

 

 

4. 메인 화면 구성 activity_main.xml

 - 설명 - 

1. 사용자가 선택한 시간 표시하는 TextView

2. TimePickerDialog 호출하는 Button

3. 알람 취소하는 Button

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/time_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:textColor="@android:color/black"
            android:textSize="30sp" />

        <Button
            android:id="@+id/time_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/time_text"
            android:layout_centerHorizontal="true"
            android:text="시간 지정" />

        <Button
            android:id="@+id/alarm_cancel_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/time_btn"
            android:layout_centerHorizontal="true"
            android:text="알람 취소" />
    </RelativeLayout>
</layout>

 

5. 메인 코드 구현 MainActivity.kt

 - 설명 - 

1. onTimeSet()

  TimePickerDialog 에서 시간 선택이 끝나면 호출되는 함수

2. updateTimeText()

  선택한 시간 표시하는 함수

3. startAlarm()

  알람 설정 함수

4. cancleAlarm()

  알람 취소 함수

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 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 = "알람 취소"

    }
}

2022.06.14 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정

 

[안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정

앞으로 TabLayout을 직접 만들어 애니메이션 기능까지 넣어보도록 하겠습니다. 이번 시간에는 화면 구성 및 설정을 만들어 보겠습니다. 목차 1. 실행 화면 2. dataBinding 설정 build.gradle 3. 테마 변경 t

aries574.tistory.com

2022.06.06 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성

 

[안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성

이번 시간부터 코틀린 버전 커스텀 달력을 만들어보겠습니다. 이번 포스팅은 화면 구성입니다. 목차 1. 실행 화면 2. dataBinding 설정 3. 메인 화면 구성 activity_main.xml 1. 실행 화면 2. dataB..

aries574.tistory.com

2022.05.31 - [안드로이드] - [Kotlin 코틀린] 간단한 RecyclerView 만드는 방법 part1 - 데이터 & 화면

 

[Kotlin 코틀린] 간단한 RecyclerView 만드는 방법 part1 - 데이터 & 화면

이번 시간에는 코틀린(Kotlin)으로 RecyclerView 리스트 만드는 방법 첫 번째 시간으로 데이터 담을 클래스와 화면을 만들어 보겠습니다. 목차 1. 데이터 클래스 만들기 2. 아이템 화면 만들기 Item

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역