IT 프로그래밍-Android 30

Hilt 적용기 1

안녕하세요. 오늘은 DI를 위한 Hilt를 적용하며 겪은 문제에 대해 공유하려 합니다. 그동안 Dagger2 라이브러리를 사용하여 의존성 주입(DI)를 수행하던 중 3일동안 찾아다녀도 도저히 컴파일오류의 원인을 찾기 못하게 되어 너무 화가 난 나머지 Hilt라이브러리가 적용하기 굉장히 편리하다는 소문을 듣고 찍어먹어보기 위해 라이브러리 공식 홈페이지 및 여러 블로그를 돌아다녀 봤습니다. 참고한 사이트 https://developer.android.com/codelabs/android-hilt?hl=ko#7 Android 앱에서 Hilt 사용 | Android 개발자 | Android Developers 이 Codelab에서는 Hilt를 사용하여 종속 항목 삽입을 실행하는 Android 앱을 빌드해 보겠습..

[안드로이드] Notification이 발생하지 않는 오류

안녕하세요. 오늘은 안드로이드의 알람생성을 위한 Notification을 사용할 때 주의할 점에 대해서 알아보겠습니다. 분명히 며칠전까지만해도 정상적으로 작동하던 알람이 언젠가부터 동작하지 않는 문제가 있어서 코드를 면밀히 살펴본 결과 Noficiation Channel이 notification과 연결되지 않고 있었습니다.(무언가 단축키도 한줄을 날려버린것 같습니다...ㅜㅜ) 안드로이드 Oreo버전 이후로 Notificaion을 발생시키기 위해서는 Notification Channel이 필요하다는 것을 다들 알고 계실거라고 생각합니다...ㅎㅎ 모르신다면 아래 URL을 참고해주세요 ! https://developer.android.com/training/notify-user/channels?hl=ko 알림..

[안드로이드] receiver 사용 시 주의할 점

안녕하세요. 오늘은 제가 AppWidgetProvider를 사용하면서 겪은 고충을 공유하고자 합니다. 일반적인 broadcast receiver를 사용할 때에도 이러한 문제가 발생할 수 있는데요 제가 겪은 문제는 다음과 같습니다. 저는 앱 위젯을 사용하여 흡연주기를 체크하는 앱을 개발하고 있었습니다. 기본적으로 타이머의 기능을 수행하려다 보니 위젯에 progressbar를 두고, 버튼을 만들어 버튼 클릭 시 progressbar를 초기화하는 기능을 만들었습니다. 문제는 버튼 클릭 이벤트와 1분단위로 위젯을 초기화하는 이벤트 총 두가지 broadcast를 송수신하는 부분에서 발생하였습니다. 아래는 제가 작성한 AppWidgetProvider입니다. class WidgetProvider:AppWidgetPr..

[안드로이드] AlarmManager 사용 시 주의할 점

안녕하세요. 오늘은 며칠째 말썽을 부린 알람매니저와 관련한 내용으로 찾아왔습니다. 일정한 시간을 기준으로 실시간으로 업데이트되는 기능을 만들기 위하여, 브로드캐스트리시버와 알람매니저를 함께 쓰고자 하였는데, 코드를 아무리 수정해도 알람매니저가 동작하지 않는 문제가 있었습니다. 나중에 알고보니 웹서핑으로 얻은 지식의 한계를 맞이한 것이더라구요...ㅎㅎ 제가 작성한 코드는 다음과 같습니다. fun makeAlarmUpdate(context:Context?, time:Long){ val alarmManager = context?.getSystemService(AppCompatActivity.ALARM_SERVICE) as AlarmManager val alarmIntent = Intent(context, Wi..

[Retrofit] java.lang.IllegalStateException: Expected Android API level 21+ but was 29 에러 해결

애플리케이션을 개발하는 동안 전혀 발생하지 않았던 다음 에러가 스토어에 출시하자마자 발생하였습니다. java.lang.ExceptionInInitializerError at okhttp3.internal.platform.Platform.get(Platform.java:85) at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263) at okhttp3.OkHttpClient.(OkHttpClient.java:229) at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1015) at com.myhome.smoketimer.repository.retrofit.RetrofitAPI.(RetrofitA..

[안드로이드] 달력만들기

안녕하세요. 오늘은 dagger + kotlin + MVVm 환경에서 달력을 만드는 실습을 공유하고자 합니다. 기본적인 컨셉은 ViewModel에서 오늘의 날짜를 입력받으면, 해당 달의 날짜들을 각각의 아이템으로 취급하여 달력아이템에 삽입하는 컨셉입니다. 첫번째로 달력을 구성하는 Item View입니다. 다음으로 달력 전체를 담고있는 fragment입니다.(여기 RecyclerView에서 위의 아이템을 담고있는 구조입니다.) 위의 item_caleadar를 calendar_recyclerview에서 그 수량만큼 추가하는 구조입니다. 다음으로는 데이터 클래스를 보도록하겠습니다. //package Your package in here data class CalendarItem ( var date:Int, v..

[안드로이드] 카카오 로그인 API v2 적용하기

안녕하세요. 오랜만에 안드로이드 개발기로 찾아 뵙습니다!! 오늘은 카카오 로그인 API v2 적용기를 다뤄보려 합니다. 해당 내용은 아래 Kakao Developers의 내용을 참고하여 작성하였습니다. https://developers.kakao.com/docs/latest/ko/kakaologin/android Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com build.gradle 설정은 kakao v2-user로 설정되었다고 가정하고 진행하도록 하겠습니다. //카카오 implementation "com.kakao.sdk:v2-user:2.8...

다음(카카오) 주소 검색(우편번호 검색) api 오류 해결

안녕하세요. 오랜만에 글로 찾아왔네요..!! ㅎㅎ 최근 다음 주소검색 API를 사용하면서 며칠이나 고생한 이슈에 대해서 공유하려고 찾아왔습니다 ! 이번 이슈는 php 또는 html을 호스팅한 웹 서버에 올린 뒤 주소검색 API를 사용하는 과정에서 발생하였습니다..!! 시간관계상 웹 서버에 파일을 추가하는 과정은 생략하도록 하겠습니다.(이미 많은 게시물에서 나와있기 때문에 !) 문제는 http 통신 환경에서 웹서버에 등록한 파일이 또 다른 js파일을 참조하고 있기 때문이었는데요.. 다음 주소검색 api의 경우 http통신과 https통신을 모두 제공하고 있기 때문에 여러분이 참조하고 있는 js파일이 어떤 주소인지를 먼저 확인해야합니다. //t1.daumcdn.net/mapjsapi/bundle/postco..

BottomSheetDialog MVVM(ViewModel, Databinding) 적용방법

안녕하세요. 오랜만에 글로 찾아뵙습니다 ! 오늘은 BottomSheetDialog에 MVVM 패턴을 위한 ViewModel 적용 방법에 대해 알아보도록 하겠습니다. 평소 Dialog는 중앙에 출력되는 것을 많이 볼 수 있었는데요 안드로이드 Pie 버전부터는 시스템 애플리케이션 Dialog가(주로 권한 요청) 화면의 최하단에 고정된 것을 종종 볼 수 있습니다. 따라서 현재 진행중인 프로젝트에서는 BottomSheetDialog를 적용해보기로 했습니다. 하지만 BottomSheetDialog에 MVVM을 적용한 예제를 좀처럼 찾아보기 힘들어 제가 작성한 코드를 공유드리려고 합니다. 우선 제가 작성한 예제에서는 BottomSheetDialog를 Fragment로 작성한다는 점 유의하시면 되겠습니다. 첫번째로 ..

[Android] Room 초기 데이터베이스 세팅

AAC의 Room을 사용하면서 데이터베이스를 생성하면서 초기에 데이터를 세팅해야하는 일이 발생하곤 합니다. 오늘은 Room을 사용하면 데이터베이스에 데이터를 미리 채우는 방법에 대해 알아보도록 하겠습니다. 아래의 Developer 사이트를 참고하면 createFromAsset 또는 createFromFile과 같은 메소드를 통해 데이터베이스를 생성할 수 있지만 저의 경우에는 제대로 동작하지 않았습니다. (참고사항에 있는 메모리 내 데이터베이스이기 때문인 것으로 보입니다) developer.android.com/training/data-storage/room/prepopulate?hl=ko Room 데이터베이스 미리 채우기 | Android 개발자 | Android Developers 때로 특정 데이터 세..