Android

    Flow 재요청 버튼 활용하기

    개요 Android App의 Flow API 사용 중 오류 발생 시 버튼을 통해 재 요청이 가능하도록 기능 구현 중 이었다. 그러나 재 요청 버튼 클릭 시 로그상으로 2회 이상 응답을 받아오는 현상이 발생했고, 이를 어떻게 수정했는지 공유하고자 한다. 먼저, 구현부를 살펴보겠다. viewModel에서 이미지 목록을 요청하는 코드인데, imageFlow 요청 실패 시 Error UI가 보여지고, Error UI의 버튼 클릭 시 fetchImageList() 함수를 수행하도록 했다. class MainViewModel @Inject constructor( private val gettyRepository: GettyRepository ): ViewModel() { val isLoading: MutableLi..

    A problem occurred configuring root project 'Unscramble'.> Could not resolve all files for configuration ':classpath'. 오류해결

    개요 android codelab (https://developer.android.com/codelabs/basic-android-kotlin-compose-viewmodel-and-state?hl=ko#2) 수행 중 android studio 버전 업데이트가 필요하다는 메세지를 보고 업데이트 수행 (dolphin -> flamingo) 이후 codelab 소스코드 Gradle project sync 실패 Compose의 ViewModel 및 상태 | Android Developers 이 Codelab에서는 아키텍처 구성요소 중 하나인 ViewModel을 사용하는 방법을 알아봅니다. 구성 변경 중에 앱 상태를 유지하도록 ViewModel을 구현합니다. developer.android.com 해결방법 ht..

    Android AppBar(Toolbar) Menu에 Lottie 사용하기

    안드로이드 앱의 메뉴 아이템에 Lottie Json을 사용 및 이벤트 처리하는 방식을 소개한다. LottieImageView를 통해 사용하는 방법은 자료들이 꽤 있었지만, 나처럼 앱바에서 Lottie를 사용하는 예제는 많지 않은 것 같아서 글을 써본다! 이 글에 사용된 방법은 Lottie 5.2.0 버전에서 구현한 방법이다. 최신버전의 Lottie는 Lottie Github에서 확인할 수 있다. https://github.com/airbnb/lottie-android GitHub - airbnb/lottie-android: Render After Effects animations natively on Android and iOS, Web, and React Native Render After Effect..

    manifestPlaceholders가 값을 찾지 못할 때 해결방법

    개발 도중 manifestPlaceholders를 통해 카카오 앱 키를 local.properties 파일에서 읽어오는 기능이 필요했는데 매니페스트에서 읽을 때에만 정상적으로 읽지 못해서 카카오맵이 정상적으로 보이지 않는 이슈가 있었다. 원인은 매우 간단했는데, local.properties에서 선언한 앱키를 따옴표 없이 감싸준 이후 정상동작 했다. 아래는 참고 할만한 코드를 공유 해본다 // build.gradle Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def KAKAO_API_KEY = properties.getPrope..

    Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hyeonwoo.art_android, PID: 26068 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hyeonwoo.art_android/com.hyeonwoo.art_android.ui.main.MainActivity}: android.view.InflateException: Binary XML file line #35 in com.hyeonwoo.art_android:layout/activity_main: Binary XML file line #35 in com.hyeonwoo.art_android:layout/activi..

    android studio에서 실행한 앱이 설치되지 않을 때

    최근 개발중인 사이드 프로젝트 앱에서 안드로이드 스튜디오를 통해 앱을 실행할 경우, 실행은 되지만 앱이 설치가 되지않는 현상이 있었다. 해당 이슈의 원인은 바로! AndroidManifest 파일에 있었는데 위의 인텐트 필터를 보면 MAIN, LAUNCHER와 함께 여러 값들이 있는데, MAIN, LAUNCHER에는 데이터 태그를 처리할 수 없다고 한다... 그래서 아래처럼 인텐트 필터를 분리시켜주면 된다고 한다. 이제 다시 설치해보자!! 정상적으로 앱이 설치된걸 확인했다. Reference : https://stackoverflow.com/questions/20285496/android-application-installed-but-wont-open-on-device Android Application..

    error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector,

    Hilt를 사용하면서 만난 오류이다. error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector, 에러가 난 코드는 아래와 같다. class KakaoAuthService @Inject constructor( @ActivityContext private val context: Context ) { fun startKakaoLog..

    BroadcastReceiver

    BroadcastReceiver ? Android 시스템 및 기타 Android 앱에서 브로드캐스트 메시지를 보내거나 받을 수 있습니다 . 이러한 브로드캐스트는 관심 있는 이벤트가 발생할 때 전송됩니다. 예를 들어 Android 시스템은 시스템이 부팅되거나 기기가 충전을 시작하는 등 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 보냅니다. 예를 들어 앱은 사용자 지정 브로드캐스트를 전송하여 다른 앱에 관심이 있을 수 있는 항목(예: 일부 새 데이터가 다운로드됨)을 알릴 수도 있습니다. BroadcastReceiver 등록 방법 // BroadcastReceiver class public class MyBroadcastReceiver extends BroadcastReceiver { private sta..

    Android 앱에서 블루투스 마우스 커서 숨기기

    Android 장치에 블루투스 마우스 장치를 연결하면 화면에 마우스 커서가 표시됩니다. 이 커서를 Android 7.0 이상부터 커서를 숨기거나, 모양을 바꿀 수 있게 되었습니다. 필자의 경우 마우스 커서를 숨기는 기능에 사용했었는데, 이때 사용한 코드를 공유합니다. 블루투스 마우스 커서의 경우 setPointerIcon 메서드를 호출한 뷰 계층에서는 마우스 커서 모양이 변경되는것으로 보이며, 시스템 UI위에서는 기본 마우스 커서가 보이게 됩니다. 아래는 제가 사용했던 코드 일부를 공유합니다. @Override public boolean dispatchGenericMotionEvent(MotionEvent motionEvent) { int index = motionEvent.getActionIndex()..

    Duplicate class a.a.a.a found in modules 오류

    SDK 외부 배포 시 발생한 오류이며 배포한 SDK의 proguard 옵션 설정으로 오류 해결 가능하다. 오류의 원인은 proguard 설정에서 패키지명, 클래스명이 난독화되면서 a.a.a.... 처럼 알파벳 순서대로 패키지명이 생성된다. 이 때 내가 배포한 SDK를 사용하는 유저가 사용하는 다른 라이브러리에서도 이러한 기본 난독화 패키지명을 사용할 경우 두 SDK의 패키지명, 클래스명이 모두 a.a... 등으로 표시되면서 클래스를 찾지 못하게 된다. 이 때 프로가드에서 flattenpackagehierarchy 옵션을 통해 기본 패키지명 앞에 식별가능한 prefix 패키지명을 붙일 수 있다. -flattenpackagehierarchy "com.hyeonwoo.handsome" 이 프로가드 설정은 co..