본문 바로가기
반응형

안드로이드 개발103

Broadcast Receiver 등록하고 시스템 이벤트 받아서 처리하기 안드로이드의 시스템은 이벤트가 발생할 때 broadcast를 보내줍니다. 이름이 broadcast이니, 방송을 한다고 해야할까요. 안드로이드 내부적으로 이벤트가 발생을 했다고 알려주는 것인데요, 안드로이드 앱에서, 시스템에게 특정한 이벤트에 관해 관심이 있다고 등록을 하면, broadcast를 수신할 수 있게 되는데요. 오늘은 사용자가 이어폰을 스마트폰에서 빼거나 꽂았을 때, 시스템 이벤트를 받아서 토스트 팝업을 띄우는 방법에 대해서 정리해보겠습니다. 네이버 뮤직 같은 앱들이 헤드폰을 빼거나 꽂았을 때, 플레이를 멈추도록 하는 기능도 broadcastReceiver를 이용했을 거라고 생각이 됩니다. 1. BroadCast 받는 방법 안드로이드의 시스템으로부터는 여러가지 broadcast를 받아서 볼 수 .. 2023. 5. 23.
SharedPreference 로 간단한 데이터 저장하기 # Android 안드로이드 개발을 하면서 간단한 key-value 형태의 값들을 앱안에 저장할 때가 있는데요. 예를 들면, 앱의 글자 크기설정, 알람 온오프 같은 값입니다. 그런데, 이럴때마다 DB를 사용하는 것은 너무나 무거운 일인데요. SharedPreference를 사용하면 좀더 가볍고, 쉽게 해결할 수 있습니다. 1. SharedPreference 는? SharedPreference는 비교작 작은 크기의 키-밸류값을 읽고 쓸수 있도록 Android Framework에서 제공해주는 기능입니다. 위에서 애기한것처럼, 설정 값등을 저장 하는데 많이 사용 하구요. 경우에 따라서 private하게 사용하거나, share될 수 있도록 할 수 있습니다. 2. SharedPreference 초기화 먼저 SharedPrefere.. 2023. 4. 27.
Room DB 사용방법 총정리 # Android SQLite 오늘은 andoird의 Room DB에 대해서 정리해 보도록 하겠습니다. 개인적으로는 Realm을 선호하기는 하지만, Android Architecture Library의 LiveData나 ViewModel과 함께 잘 사용할 수 있는 라이브러리라는 점에서는 매력적이라고 생각합니다. 1. Room 1-1. Room 정식명칭은 Room Persistence library이고요. ORM(Object Relational Mapping)으로서, SQLite 데이터베이스를 사용하기 쉽도록, 데이터베이스를 객체로 매핑해 주는 역할을 합니다. SQLite를 Annotation을 이용해서 좀 더 사용하기 쉽게 추상화했다고 보면 될 것 같은데요. 1-2. Types Room 에서 지원하는 타입은 다음과 같은 것들이 있습니.. 2023. 4. 4.
Crashlytics 구현해서 catch 한 Exception 로그 받기 # 에러 로깅 CrashLytics는 앱이 Crash가 났을경우에 알림을 주는 역할을 해 줍니다. 마켓에 앱을 출시했다면, 필수로 사용해야 한다고 할 수 있는데요. Crash를 알려주는 주 기능이외에도, 다양한 기능들이 있지만, 그중에서도 catch한 Exception에 대해서도 알림을 받는 것이 특히 유용합니다. 오늘은 이 방법에 대해서 정리해 보겠습니다. 만약 Firebase내에 현재 앱의 project가 생성되어 있지 않다면, 먼저 아래 링크를 참조해서 프로젝트를 생성해 주세요. (https://firebase.google.com/docs/android/setup) 1. CrashLytics 라이브러리 implementation 1-1. project level의 build.gradle 먼저 project 레벨 .. 2022. 11. 26.
Sealed Class 총정리 feat. enum Class 오늘은 Kotlin의 Sealed Class에 대해서 알아보도록 하겠습니다. 1. Sealed Class 와 Interface 1-1. Sealed Class 와 Interface Seal의 뜻은 밀봉하다 봉인하다는 뜻인데요. SealedClass는 abstract클래스여서 객체로 만들수 없는 자신과, 자신을 직접 상속받는 서브클래스나 interface 들로 구성되어 있습니다. 외부의 다른 Class들은 이 sealed클래스로부터 상속을 받을 수 없도록 봉인되어 있습니다. 이렇게 외부에서 확장되지 않은 밀봉된 구조를 가짐으로서, 컴파일타임에 코드를 작성하면서, 서브클래스들에 접근해서 사용이 가능해 지는 것 이지요. 이 서브클래스들은 각각의 특성에 따라서 다양한 생성자를 가질 수 있는데요. 데이터를 받아서.. 2022. 10. 11.
Kotlin 확장 함수 및 Property 에 대한 정리 # Extension Functions Kotlin을 이용하면 기존 Class와 Interface의 확장이 매우 용이합니다. 오늘은 이러한 확장을 가능하게 하는 중요한 개념인 Extension Functions 와 Extension Property에 대해서 정리해 보겠습니다. 1. Extension Functions 와 Extension Properties 1-1. Extension Functions 와 Extension Properties 여기서 사용된 Extention의 뜻은 확장 또는 연장인데요. Kotlin에서는 Class나 Interface를, 다른 Class나 Interface에서 상속받지 않고도, 함수를 추가하거나 Property를 추가함으로서 확장할 수 있는 능력을 제공해주고 있습니다. 예를 들어서, 만약 Retrofit이나 G.. 2022. 10. 4.
Dagger를 통한 Dependency Injection 구현 오늘은 Dependency Injection에 대한 지난 글에 이어서, Dagger를 통해서 어떻게 이를 구현하는지 정리해 보려고 합니다. 혹시 이전 글을 읽지 못하신 분들은아래 글의 링크를 참조해 주세요. Dependency Injection(DI)에 대해서 알아보자 Dagger1은 Retrofit등 유명한 라이브러리를 개발한 Square사의 작품이구요. 현재 사용되는 Dagger2는 구글에서 포크하여 개발하고 있습니다. 무조건적인 신뢰는 좋지 않습니다만, 이들 회사의 네임밸류와 포트폴리오 만으로도, 라이브러리에 대한 믿음이 생기는 건 어쩔수가 없네요. 그럼 Dagger를 구현하는 방법에 대해서 정리해 보도록 하겠습니다. 1. dagger2를 통한 구현준비 1-1. 라이브러리 Implement 라이브러.. 2021. 12. 22.
카카오톡이나 페이스북에서 사용하는 HashKey 얻어오기 #Android 오늘은 KakaoTalk이나 FaceBook의 API를 이용할 때 사용하는 HashKey를 얻는 방법에 대해 정리해 보겠습니다. 보통 Debug용과 Release용 해쉬키가 모두 필요한데요. 각각의 해쉬키를 어떻게 얻는지 하나씩 정리해 보도록 하겠습니다. 1. Debug용 해쉬키 카카오SDK의 경우 이러한 해쉬값을 구하는 함수를 제공해 주고 있는데요. SDK를 implement하였다면, 아래 코드를 실행시켜주면 값을 얻어올 수 있습니다. var mHash = Utility.getKeyHash(this) 카카오 SDK를 사용하지 않더라도 어렵지 않게 해쉬키를 얻을 수 있는데요. 아래 코드를 이용해서, Logcat에서 해쉬키값을 얻어오는 것 입니다. "HashKey:" 다음에 나오는 키값이 바로 Debug용.. 2021. 5. 7.
getLastLocation 으로 유저의 마지막 위치얻어오기 # Android 오늘은 Android의 location API중 유저의 마지막 위치를 알려주는 getLastLocation API와 주의할 점에 대해서 정리해 보도록 하겠습니다. 참고로 이 API를 이용하기 위해서는 위치권한을 동적으로 얻어야 하는데요. 위치권한관련해서 예전 Java시절의 권한얻는 글은 아래 링크를 참조해주시구요. 추후에 Kotlin으로 작성된 최근방식도 업데이트하도록 하겠습니다. >> Android 에서 동적 권한 얻기 #골치아픈 # Runtime Permission 1. getLastLocation 앱에서 위치정보를 필요로 할 때가 있는데요. 위치정보를 계속 실시간으로 업데이트 할 것이 아니라, 유저가 요청할 때 그때의 최신 위치를 기준으로 정보를 UI로 표현해주어야 할 때가 있는데요. 이 때 유용한.. 2021. 4. 7.
자주 사용하는 ADB 명령어 정리 # logcat 오늘은 지난 ADB를 사용하는 방법에 대한 글에 이어서, 자주 사용하는 ADB명령어에 관해 정리해 보겠습니다. 참고로 지난 글은 아래 링크를 참조해 주세요. >> ADB(Android Debug Bridge)를 사용하는 방법 1. 앱 데이터 및 앱 삭제 1-1. 앱 데이터 삭제 앱 데이터 삭제는 아래명령어로 쉽게 할 수 있습니다. adb shell pm clear 1-2. 앱 삭제 adb uninstall 앱 데이터 삭제나 앱 삭제는 테스트를 위해서 자주 사용하는 명령어 인데요. 이렇게 삭제 함에도 불구하고, 안드로이드에서는 Cloud로 백업을 해서 SharedPreference값을 재설치해도 복원해서 사용하므로 데이터 값이 제거되지 않는 경우가 있습니다. 이럴 경우에는 Manifest에서 다음과 같이,.. 2021. 3. 9.
JSON to Kotlin Class 플러그인 통해 데이터 클래스 생성하기 API에 대한 작업을 하다보면, JSON형식의 데이터를 kotlin의 data클래스로 만들어야 하는 경우가 생깁니다. 비록 Kotlin이 Java에 비해 데이터 클래스의 코드길이를 상당히 줄여주었음에도, 이 단순 작업은 지루하면서도 시간이 걸리는데요. 이러한 단순작업을 간단하게 해주기 위해 플러그인을 사용할 수 있습니다. Kotlin Data 클래스를 위한 플러그인이 바로 Json To Kotlin Class플러그인 인데요. 오늘은 이것을 사용하는 방법에 대해서 정리해 보도록 하겠습니다. 1. Plugin 설치오기 안드로이드 스튜디오에서 플러그인을 얻어오기 위해서는 다음과 같은 과정을 거치면 되는데요. 가장 먼저 Preference창을 엽니다. 아래 이미지와 같이 좌측의 네비게이션 창에서 plugin을 .. 2021. 2. 21.
Android4를 지원하지 않는 라이브러리들 정리 # API21 이상 안드로이드 개발자들에게 많이 쓰이는 라이브러리인 OKHttp나 Retrofit에서는, 안드로이드5미만의 기기를 지원하지 않겠다고 합니다. 실제로 GalaxyS3같은 안드로이드4기기의 사용자들은 많이 줄어들고 있기는 한데요. 어떻게 해야할까요? 포기해야할까요? 우선 현재 기기들의 API별 분포부터 보도록 하겠습니다. 1. API21이하(Android5미만)를 포기해야 할까? Android Studio에서 Create New Project로 프로젝트를 생성하려고 하면, Minimum SDK를 설정해야하는 부분이 있는데요. 바로 아래에 Help me Choose라는 링크가 있는데, 이를 클릭하면 아래와 같이 가장 최신의 버전별 기기분포를 볼 수 있습니다. 일부 라이브러리들이 API 21이상을 지원하겠다고 하고.. 2020. 8. 5.
Room을 이용해서 Offline Cache 구현하는 방법 정리 #Android 오늘은 구글의 Room Persistence Library를 이용하여, Offline Cache를 구현하는 방법에 대해서 정리해 보도록 하겠습니다. 참고로 Room Library의 기본적인 구현에 대한 것은 아래 글을 참조해 주세요. >> Room Persistence Library에 대해서 정리해 봅니다 #Android #SQLite 1. Offline Cache 만약 Instagram이나 Facebook의 이용자들이, 와이파이나 LTE 등이 동작하지 않는 엘리베이터 같은 곳에 가게 되었다고 가정하겠습니다. 이런 상황에서 앱을 키면 사용자들은 어떻게 되기를 원할까요? 사용자들은 예전에 보고 있던 피드들이 나오기를 원하는데요. 이러한 구조를 만들기 위해서는, 네트워크를 통해 받은 데이터들을 로컬에서 저장.. 2020. 5. 14.
vararg 로 가변 인자를 전달하는 방법 #Kotlin Kotlin에서 n개의 가변되는 인자를 전달하는 방법은 어떻게 표현할 수 있을까요? 오늘은 이 방법에 대해서 정리해 보도록 하겠습니다. 1. 가변인자 가변인자는 인자의 수가 유동적인 경우에 사용하는 데요. 쉽게 생각할 수 있는 곳이, 바로 Room Persistence Library를 이용해서, insert를 사용하는 경우입니다. 사용하는 방법은 아래와 같이 인자앞에 vararg라는 지시어를 사용해 붙여서 사용해 줍니다. 어디에 사용하는지는 알았는데, 실제로 어떻게 n개의 인자를 넣어줄 수 있을까요? 아래와 같이 들어온 인자들에 for in 문을 사용해 줄 수 있습니다. 이렇게 하면, 기존처럼 list를 인자로 받을 필요가 없어지는데요. 들어온 input 인자는 Array객체로 해당하는 메소드들을 모두 .. 2020. 5. 11.
Coroutine을 이용해 Parallel한 네트워크 호출 #Kotlin Kotlin의 Coroutine을 이용하여서 NetworkCall을 할 경우, 동시에 2개 혹은 3개의 네트워크 API를 호출해야 할 경우 어떻게 해야 할까요? 당연히 A를 먼저하고 끝나면 B를 하는 Sequential한 방법은 사용하지 않을 것이구요. Parallel하게 동시에 호출한 다음 return된 값들을 이용할 텐데요. 오늘은 이것의 방법에 대해서 정리해 보도록 하겠습니다. 1. async와 successHandler Paralllel하게 호출하여 비동기로 결과 값을 받기 위해서는, async 코루틴 빌더를 사용하여야 하는데요. 1-1. async와 successHandler의 사용 동시에 2개의 호출을 한다고 가정해 보겠습니다. 임의의 successHandler를 만들어서 async빌더에서 r.. 2020. 3. 28.
Android WebView 를 설정하고 로딩하는 방법을 정리해보자 때로는 안드로이드에서 web의 컨텐츠를 보여주어야 할 경우가 있습니다. 구글의 공식문서에는 가능하면 그냥 크롬같은 웹브라우저를 쓰라는 말도 적혀있지만, 경우에 따라서 유저들에게 해당 앱의 영역을 넘어가서, 관련 컨텐츠를 경험시키는 것이 부담스러울 때가 있기 때문이지요. 오늘은 webView를 구현하는 방법에 관해서 정리해 보도록 하겠습니다. 1. Manifest 선언 본격적으로 WebView에 대해 알아보기 전에 Manifest에 permission에 관해서 선언할 것 이 있습니다. "android.permission.INTERNET"인데요. WebView를 사용하기 전에, Manifest에 이 부분이 명시적으로 선언이 되어 있어야 합니다. 이제 준비가 되었으니, WebView를 사용해 보도록 하겠습니다.. 2020. 3. 19.
RadioButton과 RadioGroup에 대한 정리 #Android 오늘은 Android UI중에서도, RadioButton에 대해 정리해 보도록 하겠습니다. RadioButton은 검색필터 옵션 설정같이, 항상 하나의 옵션이 선택되 있어야 하는 경우에 사용하게 되는데요. 이를 구현하기 위해서는 RadioGroup과 RadioButton을 이용해 주어야 합니다. 1. RadioGroup과 RadioButton RadioButton을 사용하게 위해서는 이것을 감싸는 RadioGroup으로 감싸주어야 하는데요. 그 이유는 여러개의 RadioButton중 하나가 선택되면, 이전에 선택된 RadioButton은 해제해 주어야 하는데요. 이것을 RadioGroup이 해 주기 때문입니다. 그럼 RadioGroup의 HierArchy 를 보도록 하겠습니다. 다루기 쉬운 LinearL.. 2020. 3. 16.
Android Studio 에서 기억해야 하는 핵심 단축키 안드로이드 스튜디오를 사용할 때 코드사용에 큰 도움을 주는 단축키들이 많이 있습니다. 이런것들은 자주사용하면서 기억해두면 생산성이 높아지는데 큰 도움을 주는데요. 이 글에서 정리해 보도록 하겠습니다. 1. 선언 및 Usage 찾기 >> Cmd + B (Usage 찾기) 해당 코드가 선언된 곳이나 사용된 곳을 찾도록 도와줍니다. 2. 관련 Action 보여주기 >> Alt + Enter 예를 들어서, Kotlin에서 if문에서 return을 밖으로 꺼내는 것이나, expression body형태로 고칠 때, Action의 도움을 받아서 쉽게 코드를 수정할 수 있습니다. 2020. 3. 14.
Activity Manifest 설정에 대한 정리(launchMode, screenOrientation, configChanges 등) 안드로이드는 Activity라는 독특한 구조를 가지고 있는데요. 이 Activity를 launch할 때의 환경값이나, stack에 쌓이는 방법등을 정의할 수 있는 TAG가 있습니다. 오늘은 이것들에 대해서 정리해 보도록 할텐데요. 하지만, Manifest에 쓸 수 있는 attribute은 정말 많기 때문에, 그 중 project에 자주 사용할 만한 값들을 중심으로 정리해 보도록 하겠습니다. 1. screenOrientation 화면의 Orientation값을 설정해 줍니다. 보통 개발의 복잡도를 낮추기 위해서, 초기에는 아래와 같이 Portrait모드(세로 모드)를 많이 사용해 줍니다. 하지만, android studio3.6부터는 ignore태그를 아래와 같이 사용하지 않으면, fullSensor 혹은.. 2020. 3. 10.
Kotlin Exception 처리 방법 # RunCatching 과 try, catch 오늘은 Kotlin에서의 Exception처리에 대해서 정리해 보도록 하겠습니다. Java에서는 Exception처리를 위해서 Try Catch문을 사용했었는데요. Kotlin에서는 Try Catch 뿐만이 아니라, RunCatching API를 제공해 주고 있습니다. 오늘은 Kotlin의 Exception처리방법들인, Try Catch와 RunCatching에 대해서 정리해 보도록 하고 있습니다. 1. Classic한 Try와 Catch 그리고 finally 아래 이미지는 Java시절부터 사용해왔던 기본적인 try, catch 그리고 finally구조입니다. Try는 Exception 발생할 수 있는 코드를 감싸는 블록이구요. Catch는 Exception이 발생된 후 이를 핸들링 해주는 블록입니다. .. 2020. 2. 13.
WindowManager$BadTokenException 대응하기 Firebase의 CrashLytics에서 BadTokenException리포트를 받은 적이 있는데요. 오늘은 해당 Exception에 대해서 분석하고 대응해 보도록 하겠습니다. 1. 실제로 받은 BadTokenException 실제로 받아보았던 BadTokenException은 아래와 같은데요. 먼저 가운데에 at android.os.Handler.dispatchMessage(Handler.java:102)를 통해서, Handler객체가 Toast를 보여줄려고 했었다는 것을 알 수 있습니다. Toast를 보여주려고 하면서, view를 윈도우매니저에 add 하려고 하는데요. setView를 viewRoot에 하려고 하다가 BadTokenException을 받게 된 것이지요. 힌트를 더욱 얻기 위해서, E.. 2020. 2. 6.
Android 디버깅 방법 및 Tip에 대한 정리 오늘은 안드로이드 스튜디오를 이용하여, Android를 디버깅 하는 방법과 이와 관련한 팁들을 정리해 보도록 하겠습니다. 1. 기본적인 디버깅 툴 아이콘 사용법 안드로이드에서 디버깅을 하기 위해서는 디버깅 포인트를 잡아주어야 하는데요. 아래 이미지와 같이 코드 창 왼쪽에 빨간 점이 표시된 공간을 클릭하면, 브레이크 포인트가 설정 됩니다. 다시한번 클릭하면 사라지게 되구요. 디버깅을 시작하기 위해서는 벌레 모양의 아이콘을 눌러주어야 하는데요. 안드로이드 스튜디오 최상단에서, 아래 이미지에서의 우측 끝에 있는 녹색 벌레 아이콘을 찾아서 클릭해주면 됩니다. 참고로 안드로이드 스튜디오는 아래 이미지의 우측 끝과 같이 벌레 아이콘과 우상향을 가르키는 방향 아이콘이 그려진 것을 고르면, 앱을 실행하는 중에도 바로 .. 2020. 1. 29.
Kotlin에서 try catch finally로 처리하는 Exception Kotlin에서도 Java에서처럼 try catch finally를 이용해서 Exception들을 처리할 수 있는데요. 오늘은 그 기본적인 방법에 대해서 정리해 보도록 하겠습니다. 1. Try, Catch 그리고 Finally Try는 Exception 발생이 예상되는 코드를 감싸는 블록이고, Catch는 Exception이 발생되었을 때 실행되는 블록입니다. Try블록에서 Exception이 발생하고 , Catch블록에서 해당 Exception처리를 해주면, 앱은 Crash하지 않고, 다음 코드를 실행시켜 줍니다. (물론 Catch에서 잡아주지 못한 Exception이 발생한다면 그 때는 Crash가 나겠지요. Try로 감싼다고 무조건 Crash를 막지는 못 합니다.) Finally는 Exception.. 2020. 1. 28.
Android Dialog 구현하는 방법 #Kotlin 버전 다이얼로그 Dialog는 유저에게 결정을 요구하고나 추가적인 정보를 입력받고자 할 때 사용하는데요. 오늘은 이것을 생성하는 방법에 대해서 kotlin을 이용하여서 최근 공식문서에서 추천하는 방법을 정리해 보도록 하겠습니다. 공식문서에서는 Dialog객체를 직접 생성하지 말고, 서브클래스인 AlertDialog를 사용하라고 하고 있습니다. (필요에 따라서 시간이나 날짜를 설정할 경우에는 DatePickerDialog혹은 TimePickerDialog를 사용하구요.) 또한, Dialog의 컨테이너로 DialogFragment를 사용하기를 권유하고 있는데요. 그럼 DialogFragment부터 구현해 보도록 하겠습니다. 1. DialogFragment DialogFragment를 상속받는 Fragment클래스를 먼저 만.. 2020. 1. 17.
KOIN을 이용한 Dependency Injection (DI) 구현하기 DependencyInjection을 구현하는 것을 도와주는 라이브러로 가장 유명한 것은, Square에서 시작해서 Google에서 이어서 만들고 있는, Dagger2인데요. 오늘은 다른 라이브러리인 Koin에 대해서 알아보도록 하겠습니다. 혹시 Dependency Injection에 대한 개념을 이해하지 못하고 계신 분들은 아래 글을 참조해 주세요. >> Dependency Injection(DI)에 대해서 알아보자 1. Implementation 가장 먼저 할 것은 라이브러리를 Implement하는 것 인데요. 아래와 같이 한 줄이면 됩니다. 2. Single과 Factory 먼저 Koin에서 객체를 생성해 주입시켜줄 Module을 생성하기 전에, Module에서 사용되는 중요한 키워드인 Single.. 2020. 1. 6.
DataBinding에 대해서 알아보자 part2(Glide, EditText) 지난 part1에서 DataBinding에 관한 기초적인 부분들을 정리해 보았는데요. 이번에는 Glide같은 라이브러리를 이용할 수 있도록 Binding Adapter를 사용하는 방법과 EditText에서 String을 입력하면 TextView에서 그 값을 받아서 출력하는 방법을 정리해 보겠습니다. DataBinding에 대한 기초적인 내용은 아래 글을 참조해 주세요. >> DataBinding에 대해서 알아보자 part1 1. Glide와 Binding Adapter xml의 ImageVIew에서 Glide를 사용하기 위해서는 어떻게 해야할까요? DataBinding은 xml에서 바로 bind해서 사용하는 것 인데, Glide를 xml에서 바로 이용할 수는 없습니다. 그 문제를 해결하기 위해서는 Bin.. 2019. 12. 23.
DataBinding에 대해서 알아보자 part1 오늘은 안드로이드 Architecture Component Library중의 하나인 DataBinding에 대해서 알아보도록 하겠습니다. 1. DataBinding DataBinding은 androidX 즉, jetpack에 포함되어 있는 라이브러리인데요. 레이아웃에 있는 View들을 data소스들과 바인딩 해주는 역할을 합니다. XML의 요소들을 단순히 Activity클래스에서 불러다가 쓰는 것이 아니라, XML안에서 expression들을 사용하면서, 자체적인 로직도 가질 수 있게 되는데요. View를 담당하는 컴포넌트들의 코드가 매우 간결해지고, 그에 따라 코드를 관리하거나 읽기가 쉬워집니다. 2. 라이브러리 셋업 특별히 implement할 것은 없구요. 아래와 같이 앱레벨의 build.gradle.. 2019. 12. 23.
SoundPool 이용해서 다양한 사운드(효과음) 재생하기 #Android 안드로이드 앱을 개발하면서 동시에 여러가지 사운드를 플레이해야하는 경우가 있습니다. 이럴때는 mediaPlayer클래스를 사용하기보다는, SoundPool클래스를 사용해야 하는데요. 오늘은 이 SoundPool 클래스에 대해서 정리해 보도록 하겠습니다. 1. SoundPool 클래스 SoundPool클래스는 여러개의 음원을 미리 로딩해 놓고, 필요한 시간에 각각을 혹은 동시에 재생시킬 수 있는 장점이 있는 Class입니다. 이러한 장점때문에 아무래도 게임앱의 효과음이나 배경음을 재생하는데 많이 사용되는데요. 그럼 객체를 생성하는 방법부터 하나씩 알아보도록 하겠습니다. 1-1. 객체 생성 SoundPool클래스의 객체를 가져오기 위해서는 아래와 같이 해주면 되는데요. Lollopop이후 버전과 아닌 버전과.. 2019. 11. 5.
Kotlin으로 Android개발 하기 구글에서 "Kotlin First"를 말하기도 하였고, 공식문서도에서도 Kotlin을 예제로 보여주기도 하는 등, Kotlin의 시대라고 해도 과언이 아닌데요. 여전히 기존 Java프로젝트와 호환되지 않거나 특별한 방법을 추가해야 하는 경우도 있고, 혹은 Android 프레임워크의 특성상 Kotlin을 이용해, 더 쉽게 사용할 수 있는 방법들이 있는데요. 오늘은 Kotlin으로 Android를 개발하면서 알아야 하거나, 주의해야 할 부분들에 대해서 정리해 보겠습니다. 1. kapt Kotlin에서 Java의 Glide나 Dagger의 Annotation Processing을 사용하기 위해서는 kapt compiler plugin을 사용해야 하는데요. 특히나 Glide는 개인적으로는 모든 프로젝트에 사용되.. 2019. 10. 22.
ArrayIndexOutOfBoundsException과 ViewHolder의 getAdapterPosition사용 RecyclerView를 이용해서, list상의 아이템 중 하나를 유저가 클릭한 경우, 해당 View의 position을 알아오기 위해, ViewHolder에서 getAdapterPosition을 사용하는 경우가 있습니다. 이런 경우에 ArrayIndexOutOfBoundsException이 발생하는 경우가 있는데요. 오늘은 이것의 원인과 대응 방법을 정리해 보도록 하겠습니다. 1. ArrayIndexOutOfBoundsException의 원인 ViewHolder에서 getAdapterPostion()메소드를 호출 한 경우, 디폴트 값은 "RecyclerView.NO_POSITION"인데요. 이 값이 바로 "-1"입니다. getAdapterPosition메소드는, 아이템이 있을 경우에만 해당하는 posi.. 2019. 10. 18.