본문 바로가기

분류 전체보기75

운동일지 App 문제 해결 #01 문제1. 백그라운드로 처음 갔을 때 알림이 바로 생성되지 않고 두번 정도 가야 생성이 되는 문제 문제2. 타이머를 일시 정지 시켰을 때 알림은 계속 시간이 가는 문제 문제1. 해결 서비스를 수명주기가 ON_STOP 될 때 실행했었는데, 시작 버튼을 눌렀을 때 서비스가 실행되도록 하였다. 문제 해결 이전 코드 @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onAppBackgrounded() { val startIntent = Intent(requireActivity(), ForegroundService::class.java) startIntent.putExtra(COMMAND_ID, COMMAND_START) startIntent.putExtra(STARTED_TIME.. 2022. 2. 17.
운동일지 App 개발일기 #04 운동 기록 화면 운동 기록 추가 화면 운동 기록을 추가하면, 달력에 기록 수에 따른 Dot을 찍는다. 달력의 날짜를 클릭하면 그날의 기록을 화면에 표시하도록 하였다. 루틴 목록 루틴 진행 타이머 작동 루틴 시작하기 버튼을 누르면, 루틴 진행 화면으로 넘어간다. 루틴에 포함된 운동을 확인할 수 있고, 타이머를 통해 루틴을 진행한 시간을 확인할 수 있다. 완료 버튼을 누르면 운동 기록을 저장할 수 있다. 추후에 운동 기록에 운동 시간도 저장할 수 있도록 해야겠다. 운동 목록 운동 목록을 확인할 수 있고, 추가할 수 있다. 타이머 기능을 추가하면서 한 생각이, 백그라운드로 실행했을 때도 서비스를 이용, 알림으로 운동 진행 시간을 알 수 있으면 좋겠다고 생각하여 추가한 기능이다. 백그라운드로 처음 갔을 때 알림.. 2022. 2. 16.
[Kotlin] Coroutine을 이용한 간단한 타이머 1. 시작 버튼을 클릭했을 때, System의 현재 시간을 StartTime 변수에 저장하고 인수로 시작 시간을 주어, Timer를 시작시킨다. 2. Coroutine Scope 안에서 while문을 실행시켜 System의 시간을 Delay를 이용 계속 갱신한다. 이때 화면에 표시될 시간은 Scope 안에서 [ 갱신된 System의 시간 - 인수로 전달된 시간 ]이 될 것이다. 3. 이미 시작이 된 경우, 중지 또는 타이머를 재개시킨다. 이때, 재개시키는 경우의 시간은 중지가 된 시점부터, System의 시간을 뺀 값이다. 그 후, Timer에게 재개 시간을 인수로 주어, Timer를 다시 시작한다. private var isStart = false private var startTime = 0L pri.. 2022. 2. 16.
[kotlin] 운동 일지 App 개발일지 #03 본격적으로 Room을 이용하여 삽입, 삭제, 수정을 적용시키고 있다. 1:N, M:N의 관계를 가진 Entity들을 삽입, 삭제, 조회 기능을 추가하였다. 현재 운동일지 App의 Entity Dialog 그램이다. 루틴, 운동 Entity와 루틴, 운동부위 Entity는 서로 M : N 의 관계를 가진다. 루틴이 삭제되어도 등록한 운동들은 삭제되지 않아야 하고, 운동 부위들도 삭제되지 않아야 하기 때문에 이런 관계를 가진다. 운동, 운동세트는 1:N의 관계를 가진다. 운동이 삭제되면, 운동세트도 사라진다. 한눈에 보기 쉽게 SQL WorkBench로 작성한 것이며, 실제 Room Database와 다르다. 운동 추가 화면 루틴에 운동이 추가된 화면 운동 CardView 클릭 운동 검색 창 체크된 운동이 .. 2022. 2. 4.