Android
-
안드로이드 MediaPlayer mp4 비디오 재생 예제 (+VideoView)Android 2020. 7. 22. 00:09
안드로이드에서 비디오 파일을 재생하는 방법에 대해 남겨보려 한다. 초창기부터 비디오 플레이가 핵심 기능이었던 스마트폰의 역사에 걸맞게 안드로이드도 비디오 파일 재생에 있어서는 다양하고 편한 여러 가지 방법들을 제공한다. 거의 모든 안드로이드 폰에서 하드웨어 가속이 뒷받침 되기에 범용적으로 많이 쓰이는 미디어 파일들의 경우 전혀 무리없이 재생이 가능하다. 이번에는 여러 가지 방법들 중 가장 쉬운 VideoView를 활용한 방법과 한 단계 더 나아가서 MediaPlayer를 직접적으로 사용하는 방법에 대해서 남겨보려 한다. 미디어 컨트롤, 해상도 변경, 스트리밍 처리, 레이어 애니메이션 등 고급 주제는 배제하고 단순히 APK내부에 포함된 비디오 파일을 재생하는데 집중하겠다. VideoView 비디오뷰는 안드..
-
안드로이드 Glide와 CircleImageView로 원형 이미지 표시Android 2020. 7. 20. 20:33
안드로이드 작업을 하던 중 이미지뷰를 동그랗게 표시해야 하는 상황을 만났다. 카카오톡의 프로필 사진이 동그랗게 표시되는 것과 유사한 형태의 작업이었다. 당연히 안드로이드의 기본 UI를 통해 아주 간단하게 할 수 있을줄 알았는데, 세상 일이 그리 만만치 않았다. 언제나 나를 실망시키지 않는 안드로이드에 실망하면서 방법을 찾아보니 꼼수로 원형으로 뚤린 프레임을 만들어 이미지뷰 위에 덮어 씌우는 방법이 가장 간단한 방법인 것 같았다. 그런데, 내 경우에는 원형 뒤의 배경이 투명이어서 적용이 불가능한 방법이었다. 가장 정석대로 하려면 최종 Texture를 건드릴 수 있는 TextureView를 만들어 쉐이더로 연산을 하는 방법이 있는데 이 방법은 내가 하려는 일에 비해 배보다 배꼽이 큰 방법이었다. 결국 결론 ..
-
안드로이드 AsyncTask의 doInBackground 호출 안됨Android 2020. 7. 19. 22:40
AsyncTask를 사용하던 중 doInBackground()가 호출이 되지 않는 상황을 겪게 되었다. 복잡한 앱이 아닌 단순 클릭킹 프로토타입을 만들던 중에 일어난 일이라 황당할 따름이었다. 대략 화면을 터치하면 화면이 전환되며 4개의 작은 동영상이 동시에 재생되는 너무나 간단한 작업이라 아무 생각 없이 AsyncTask 4개를 돌렸는데 1개만 재생이 되는 현상이 나타났다. 찾아보니 문제의 원인은 AsyncTask가 이름의 뉘앙스와는 어울리지 않게 기본적으로 싱글 스레드에서 실행이 되었기 때문이었다. 영상 재생 후 다른 작업을 같이 하려고 무한루프에서 2초 정도씩 슬립하며 추가 작업을 수행했는데 이게 문제였다. 이 무한 루프가 끝날 때까지 다른 AsyncTask들이 끝날 기약없는 대기를 타고 있었던 것..
-
안드로이드 (Deprecated) AsyncTask 대체하기Android 2020. 3. 5. 20:06
안드로이드에서 백그라운드 작업을 하기 위해 자주 사용하는 AsyncTask가 사망선고를 받았다. 작년 하반기에 올라온 이 커밋에서 AsyncTask에 @Deprecated가 붙었고, 커멘트에 다음과 같이 나와 있다. AsyncTask was intended to enable proper and easy use of the UI thread. However, the most common use case was for integrating into UI, and that would cause Context leaks, missed callbacks, or crashes on configuration changes. It also has inconsistent behavior on different versi..
-
안드로이드 앱 완전히 종료하기Android 2019. 9. 19. 19:22
안드로이드 앱은 액티비티의 집합으로 이루어져 있다. 생명주기도 액티비티마다 제각각이고 시작시점과 종료시점도 때로는 불분명한 것이 안드로이드의 현 주소이다. 가장 단순한 시나리오인 앱의 종료에 있어서도 생각할 것이 많다. 액티비티만 종료를 한다면 앱의 프로세스가 살아 있어서 예기치 못한 부작용이 나타나기도 하고, 앱의 프로세스만 종료하면 Task List에 앱이 여전히 남아있는 등, 다양한 문제가 나타난다. 여러 가지 실험 결과 앱을 완전히 종료하기 위해서는 다음의 스텝을 따라야 한다는 것을 깨달아서 남겨본다. 태스크를 백그라운드로 이동 -> 액티비티 종료 -> Task List에서 지우기 -> 앱 프로세스 종료. 이 중 하나만 빠져도 예기치 못한 상황이 발생한다. 아직까지는 이 방법으로 문제가 없는데, ..
-
안드로이드에서 Rest API 호출하기Android 2019. 5. 30. 23:40
최근의 안드로이드 앱들은 서버와의 연결이 필수적이다. 과거에는 성능 등의 문제로 Native Server가 쓰이는 경우가 많았지만, 현대에 들어서는 Restful Web API를 통해 서버와 교신을 하는 경우가 늘어났다. 안드로이드 앱은 코틀린으로 작성되었거나 NDK 로 쓰여진 부분을 제외하면 자바 기반으로 쓰여지는데, 다행히 Java는 전통적으로 서버 사이드에 많이 쓰여왔기에 http 형태의 스트림을 처리하기에 알맞은 내장 클래스들을 대부분 가지고 있다. 이번에는 특별한 라이브러리를 쓰지 않고 Java만을 이용해 간단히 Rest API를 호출하는 방법을 살펴보려 한다. 필요한 클래스는 다음과 같다. Class Description HttpURLConnection HTTP 연결을 만든다 InputStre..
-
안드로이드 앱에서 Picasso와 Glide를 사용해 이미지 표시하기Android 2019. 5. 12. 17:44
안드로이드앱을 만들면서 가장 많이 마주치는 경우가 아마도 이미지를 표시하는 경우일 것이다. BMP, JPG, GIF등 다양한 포맷의 이미지를 표시하는 것은 시각적인 부분이 중요한 안드로이드 앱 개발에서 빼놓을 수 없는 부분이기 때문이다. PC용 운영체제들의 경우에는 OS 자체적으로 이러한 이미지들을 화면에 표시하는 방법을 제공하는 경우가 많았는데, 안드로이드에서도 기본적인 이미지 로딩 방법을 제공하고 있다. 그러나 앱 개발자가 기본 기능만을 활용하기에는 실제 앱개발 시나리오에 맞추어 추가적으로 구현해 주어야 할 코드의 양이 많아진다. 오래 전부터 이미지 표시에 대한 수요가 있어왔기에, 안드로이드 세계에는 여러 개의 이미지 로딩 라이브러리가 존재한다. 이번에는 안드로이드의 이미지 라이브러리들 중 가장 유명..
-
안드로이드 전체화면 (Full Screen Activity) 만들기Android 2019. 5. 12. 14:46
특정 안드로이드 앱들은 사용자에게 몰입된 경험을 주기 위해 전체 화면을 사용하는 풀스크린 형태로 만들어진다. 그런데 안드로이드 프로젝트를 처음 생성하면 기본적으로 보이는 Activity는 상단에 커다란 타이틀바가 있는 형태를 가지고 있다. 오랫만에 풀스크린 형태의 안드로이드 앱 개발을 하게되었을 때, 큼지막하게 나오는 타이틀바를 보면서 이것을 어떻게 없애야 하나 한참 고민했었다. 아주 옛날에는 AndroidManifest.xml 내부에 android:theme에 타이틀바가 없는 형태의 테마를 지정할 수 있었던 것으로 기억하는데, 해당 테마를 적용하면 호환성 문제가 있다고 워닝이 뜨는 것을 발견했다. 안드로이드는 높은 점유율에도 불구하고 짧은 기간 동안 너무 변화가 많이 일어나는 것 같다. 문제 해결 방법..