Side Project - My Alarm
시간을 지정해 알람을 설정하고, 지정된 시간이 되면 알람이 울리는 앱을 구현한 프로젝트
- GitHub -> https://github.com/hwayeon351/My-Alarm
학습 회고
오늘은 기본 앱인 알람 앱을 만들어보는 프로젝트를 시작했다.
알람을 설정하고 난 후, 해당 앱이 백그라운드 상태로 넘어갈 수 있고 알람을 끄거나 시간을 바꿀 수도 있다.
따라서 key-value로 파일에 저장하는 SharedPreferences를 사용하여 알람을 등록하고 삭제하였다.
오늘 공부한 내용
- TimePickerDialog
안드로이드에서 제공하는 컨트롤로 사용자는 시간이나 날짜를 대화상자로 선택할 수 있다.
TimePicker는 시간(시, 분, 오전/오후)이나 날짜(년, 월, 일)의 각 부분을 선택하는 컨트롤을 제공하며, 시간을 선택하는 Dialog가 TimePickerDialog이다.
public TimePickerDialog (Context context,
TimePickerDialog.OnTimeSetListener listener,
int hourOfDay,
int minute,
boolean is24HourView)
TimePickerDialog의 생성자에는 Context, TimePickerDialog.OnTimeSetListener, hourOfDay, minute, is24HourView를 매개변수로 갖는다.
- TimePickerDialog.OnTimeSetListener - TimePickerDialog에서 시간이 셋팅되었을 때 호출되는 콜백 리스너이다.
- hourOfDay - TimePickerDialog의 초기 시를 설정한다.
- minute - TimePickerDialog의 초기 분을 설정한다.
- is24HourView - true = 24시간으로 표기, false = AM/PM으로 표기를 설정한다.
알람 앱에서는 알람을 셋팅할 때 초기 TimePickerDialog에 현재 시각으로 보여지기 위해서 Calendar 객체에서 현재 시간을 가져와 설정하였다. 또한, AM/PM으로 표기하기 위해 is24HourView에 false 값을 넣어 TimePickerDialog를 생성하고 show()를 호출해서 띄워주었다.
TimePickerDialog(this, { picker, hour, minute ->
val model = saveAlarmModel(hour, minute, false)
renderView(model)
}, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false)
.show()
https://developer.android.com/guide/topics/ui/controls/pickers
- SharedPreference
SharedPreference 객체는 Key-Value 쌍이 포함된 파일을 가리키며, Key-Value로 데이터를 쓰거나, 읽을 수 있는 메서드를 제공한다.
앱 내의 데이터는 앱이 종료되면 메모리에서 삭제가 되기 때문에 앱이 종료되고 다시 실행했을 때에는 사라지게 된다.
따라서 간단하게 Key-Value 형식으로 저장할 수 있는 데이터는 SharedPreference를 사용하여 앱이 종료되어도 다시 데이터를 읽을 수 있도록 저장할 수 있다.
SharedPreference는 저장하려는 Key-Value 컬렉션이 비교적 작은 경우에 사용하면 좋다.
SharedPrefereces를 사용해서 파일을 생성하면 실제 파일은 단말기의 /data/data/PACKAGE_NAME/shared_prefs에 지정한 Preferences 이름으로 xml 파일이 생성된다.
안드로이드 스튜디오의 Device File Explorer를 통해 확인할 수 있다.
- getSharedPreferences(): SharedPreferences 파일의 이름과 Context 모드를 매개변수로 하여 해당 SharedPreference 파일을 가져올 수 있다.
val sharedPreferences = getSharedPreferences("time", Context.MODE_PRIVATE)
Context.MODE_PRIVATE로 비공개 모드를 설정해서 해당 앱에서만 파일에 액세스하도록 할 수 있다.
- edit(): SharedPreferences.Editor를 만들고 putInt()나 putString()과 같은 메서드를 사용해서 파일에 Key-Value를 쓸 수 있다.
- apply(): 쓰기가 완료된 후 SharedPreferences 객체를 즉시 변경하지만 디스크에는 비동기적으로 쓴다.
- commit(): 쓰기가 완료된 후 데이터를 디스크에 동기적으로 쓴다. 동기적이므로 기본 스레드에서 호출하는 것을 피해야 한다.
with(sharedPreferences.edit()) {
putString(ALARM_KEY, model.makeDataForDB())
putBoolean(ONOFF_KEY, model.onOff)
commit()
}
SharedPreferences 파일에서 데이터를 가져올 때는 getInt(), getString(), getBoolean() 등을 사용해서 매개변수에 Key값과 Default 값을 넣어주면 된다. (해당 키 값이 존재하지 않으면 Default 값이 반환된다.)
val sharedPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
val timeDBValue = sharedPreferences.getString(ALARM_KEY, "9:30") ?: "9:30"
val onOffDBValue = sharedPreferences.getBoolean(ONOFF_KEY, false)
https://developer.android.com/training/data-storage/shared-preferences?hl=ko
'Android > Side Projects' 카테고리의 다른 글
도서 리뷰 앱 개발하기 (1) | 2022.02.10 |
---|---|
My Alarm 앱 개발하기 (0) | 2022.02.09 |
오늘의 명언 앱 개발하기 (1) | 2022.02.07 |
오늘의 명언 앱 개발하기 (0) | 2022.02.06 |
푸쉬 알림 수신기 앱 개발하기 (0) | 2022.02.05 |