Context? 직역하면 '맥락'이란 뜻인데, 안드로이드를 잠깐이라도 써 본 사람들은 쉽게 들어봤을 것이다. 당장 많이 사용되는 Toast에서도 첫 매개변수로 Context를 요구한다. > 가장 흔하게 많이 쓰이는 경우가 아닌가 싶다 그렇다면 이 Context는 정
개발하다보면 Log는 정말 자주 쓰인다.값이 잘 들어갔는지 아니면 원하는 지점에 진입은 했는지 등내부적으로 확인이 필요할 때 많이 쓴다.안드로이드에선 기본적으로 Log를 제공한다.android.util.Log 로 제공되는 클래스가 그것인데,이런 형태로 사용된다.하지만
사람을 비롯한 모든 생물들에게 수명이 있듯이액티비티를 비롯한 여러 컴포넌트에도 수명이 존재하며이 액티비티의 수명을 안드로이드에선 생명주기(Life cycle)이라고 부른다.액티비티는 생물이 아니다생명주기는 액티비티의 실행부터 종료 사이에 발생하는 상태 변화에 따라 해당
👀 Glide란? Glide란 안드로이드 개발에서 가장 대중적으로 널리 쓰이는 이미지 처리 API로써 용량이 적고 빠르다는 장점이 있다. Picasso 라고 부르는 API도 있지만 Glide에 비해 속도가 느리지만 화질은 더욱 좋다고하니 목적에 따라 취사선택해서 사용
Rest API를 사용하면 반환값으로 Json 형식의 데이터로 반환받기 마련인데,Client에서 이를 담아줄 DTO가 있어야한다.그럼 먼저 DTO를 만들어줘야 하는데 Json의 멤버가 10개 이하라면 괜찮겠지만그 이상이라면..장인의 손길이 필요한 순간이다.몇 년전 개봉
안드로이드 개발을 하다보면 뷰의 요소들이 중첩되는 경우가 많다.예를 들어 버튼이라면 일관성을 위해 같은 Background 혹은 Drawable들을 사용하는 경우가 많다.근데 각 버튼들마다 똑같은 속성들을 계속 작성하다보면가독성도 떨어지고 시간도 배로 걸린다.
우리가 사진을 찍고 갤러리에서 확인해보면 해상도부터 촬영시간, 촬영기기, 심지어는 촬영된 위치까지 확인할 수 있다.이는 사진에 저장되어있는 메타데이터 덕분인데Exif는 이 메타데이터 형식 중에선 사실상 표준에 가까운 형식이다.자세한 정보는 여기를 참고엄청 많은 걸 알려
🙄 View Binding ..? 안드로이드에서 xml에 있는 View를 Kotlin(or Java) 코드에 연결하는 방법은 3가지가 있다. 더 있을 거 같은데? findViewByid() //유구한 역사를 자랑한다 Kotlin extention //생각해보니 코틀
Android Studio에서는 Git 연동을 지원한다.연동을 하면 Studio에서 commit, push 등 git 관련 처리를편리하게 할 수 있다.단, 지원하지 않는 기능도 일부 있으니 이 경우는 CLI를 사용하는 것이 좋다.먼저 상단바에서VCS - import i
말 그대로 PC에서 안드로이드를 에뮬레이팅 할 수 있는 가상 기기이다.Virtual Box나 Mac의 Parallels를 생각하면 이해가 쉬울 것이다.Android Studio에선 손쉬운 Virtual Device를 제공하는데오늘은 이를 사용하여 Virtual Devi
🎈 DataBiding.. DataBinding이란 Android Jetpack의 구성 중 하나로, Layout과 Activity를 연결하여 View의 Data를 동적으로 제어할 수 있게 해주는 라이브러리이다. 오늘은 DataBinding에 대해서 간단하게 사용법을
gist란 Github에서 제공하는 Code Snippet 서비스로코드 조각이나 메모 등을 작성하고 관리할 수 있는 서비스다.자세한 내용은 이전 포스팅을 참고하면 된다.이 포스팅은 Android Studio에 Github 계정이 연동되었다는 가정 하에 작성되었습니다.매
Android에서 이런 대화상자를 자주 봤을 것이다.사용자와 상호작용을 할 수 있게 도와주는 이 대화상자를 Dialog라고 한다.위 사진의 Dialog가 Android에서 제공하는 기본적인 Dialog인데이를 자신의 입맛에 맞게 Custom 하는 방법이 있다.먼저 cu
Dialog Custom 두번째 지난 글에서 소개한 Dialog Custom 방법은 간편하게 DIalog를 Custom 할 수 있다는 장점이 있지만 치명적인 단점이 있다면 보일러 플레이트 코드가 남발된다는 것이다. 물론 모듈화를 하여 재사용한다면 큰 문제가 되지 않겠지
직역은 튀김이다Splash, 정확히 SplashScreen이라고 하는데카카오톡이나 인스타그램을 실행하면 로고나 영상같은 것이표시되었다가 화면이 전환되는데이때 로고나 영상이 표시되는 것이 Splash이다.앱을 실행할때 네트워크 처리와 같은 사전 작업이 필요할 때로고를 띄
😕 차이가 뭘까.. 둘 다 내부에 데이터를 저장한다는 점은 동일하다. savedInstanceState (Bundle) SharedPreference (xml) 하지만 작동법을 살펴보면 용도가 확연하게 구분된다. 👀 동작이 다르다. savedInstanceSta
Android에서 만들 수 있는 menu는 3가지가 있다.Popup MenuContext MenuOption Menu각 자 생성하는 방법도 다르고 사용법도 다르니그에 맞게 취사선택해서 사용하면 되겠다.menu를 만드려면 일단 menu를 구성하는 item들을 담은 xml
Selector란 View의 각 상태의 drawable을 달리하여 효과를 줄 수 있는 방법이다.Background와 textColor 등에 적용할 수 있다.먼저 View의 상태들은 상당히 많지만 많이 쓰이는 것들만 정리하자면PRESSED (눌렀을때)ENABLED (사용
Fragment를 replace 할 때replace 하려는 Fragment가 이미 동작 중이라면replace 하지말고 return 시켜버리는 방어 코드가 필요하다.코드는 아래와 같다.위 코드는 Kotlin으로 작성되었습니다.
개요 UI를 개발하다보면 간혹 색상의 투명도를 조절하고 싶을 때가 있다. 이를테면 Selector라던가.. Selector말곤 없나..? Android에서는 색상코드 앞에 2개의 문자를 추가하는 것으로 간편하게 투명도를 조절할 수 있다. 투명도 코드 적용하려는 색
ViewPager? > Display Views or Fragments in a swipeable format. 뷰나 프래그먼트를 스와이프 할 수 있게 보여줌 구글 공식문서에선 위와 같이 정의하고 있다. 말그대로 View나 Fragment를 페이지처럼 스와이프 할 수
Fragment란? Activity 내에 UI를 구성할 수 있는 일종의 모듈로 하나의 Activity 안에 여러 개의 Fragment로 구성할 수도 있고 하나의 Fragment를 여러 개의 Activity가 재활용해서 사용할 수도 있다. Fragmnet는 자체적인 수
Android Virtual Device (a.k.a 에뮬레이터, 이하 AVD)는Quick Boot를 지원하는데 이를 위해서 종료 전 상태(State)를 저장하고실행하면 이 상태를 불러오는 것으로 부팅 속도를 높인다.근데 이 방법의 단점은 먹통(?), 반응이 없는 상황
SharedPreferenc는 Application의 데이터를Android 기기 저장소에 키와 값으로 저장할 수 있는 라이브러리다.저장하려는 데이터 크기가 작아서(ex. 설정값 등) DB를 쓰기 부담스러울 때 아주 좋은 대안이 될 수 있다.또 위에서 언급했드이 키와 값
앱을 만들다보면 SoftKeyboard(이하 키보드)를특정 조건에 맞춰 올리거나 내리고 싶을 때가 있다.다행히도 Android에서코드 몇 줄로 처리가 가능하게 방법을 제공하고 있다.우선 공통적으로 InputMethodManager 인스턴스를 가져와야한다.키보드를 올리거
작년 이 맘때 캡스톤 프로젝트를 할 때 Zxing API를 활용해서QR code 스캔 기능을 사용했었는데 다시 정리해보는 차원에서글을 써보려 한다.Zxing API(Zebra Crossing)는 매우 손쉽게 QR code를 스캔하거나 생성하는 기능을 제공한다.아마 QR
안드로이드에는 그라데이션을 xml코드로 간단하게 구현할 수 있게 지원한다.shape 태그로 도형을 만드는 것과 비슷한 방법이다.drawable 패키지에 새로운 리소스 파일을 하나 만든 뒤아래와 같이 작성해보자기본적으로 시작하는 색부터 끝나는 색 2가지 외에도center
더블탭을 사용할 일이 생겨서 구현을 하려고 한다.처음엔 GestureDetector의 OnDoubleTabListener를 사용하려고 했으나사용하지 않는 다른 기능까지 재정의 되어야해서좀 더 간결하게 사용하고싶은 마음에 직접 만들어보기로 했다.우선 코드를 살펴보면..현
보안 상의 이유로 캡쳐를 막아야할 때가 있다.매우 간단하게 한 줄로 처리가 가능하다.구현하고 싶은 Activity의 onCreate() 내에서 위 코드 한 줄을넣어주면 된다.캡쳐 뿐만 아니라 화면 녹화나 멀티태스킹 화면에서도화면이 가려진다.
토이 프로젝트를 만들고 있었는데갱신을 할 때마다 진동을 울려주고 싶어서 사용법을 정리해 보았다.코드는 굉장히 쉽다.진동은 Vibrator라는 클래스를 통해서 사용이 가능하다.하지만 API Level 26 (Oreo)부터 방법이 조금 바뀌었다.Oreo부터는 Vibrati
LiveData
localhost에서 Rest API를 호출하려는데connected fail이 발생했다.안드로이드에선 자주 사용되던localhost:3000127.0.0.1:3000같은 방법으론 접근이 안된다.대신 안드로이드 자체적으로 localhost에 접근할 수 있는 IP를 제공한
개요 안드로이드에서 DB를 사용하는 방법은 2가지가 있다. DB가 연동되어 있는 외부 서버와 통신하기 로컬 DB 사용하기 (SQLite) 보통 Oracle이나 MySql을 연동해서 사용하는게 일반적일텐데 안드로이드는 왜 사용하는 방법이 갈리냐면 안드로이드에서는 직접적
Retrofit이란? Retrofit이란
개발 중인 프로젝트의 키 값이 필요할 때가 있다.keytool을 사용해도 좋지만그보다 편리한 방법이 바로 Android Studio에 있다.등잔 밑이 어둡다먼저 Studio 우측에 Gradle 탭을 연다.app -> Tasks -> android -> signingRe
크롤링이란 웹페이지를 그대로 가져와서 데이터를 추출하는 것을 일컫는다.여러가지 방법이 있지만 필자는 Android에서 사용하기 위해Java에서 크롤링을 할 수 있게 도와주는 Jsoup라는 API를 사용할 예정이다.Jsoup는 HTML을 파싱해서 특정 조건을 가진 태그만
Toolbar의 title은 기본적으로 정렬을 지원하지 않는다. 그래서 약간의 꼼수를 사용해야한다. 우선 Toolbar의 title을 hide 시켜야한다. 그리고나서 xml로 가서 toolbar의 하위에 textview를 추가해준다.
개요 TextView에 있는 내용 중 일부 Text에 클릭이벤트를 주고 싶을 때가 있다. Android의 라이브러리 중에서 이를 손쉽게 지원해준다. Linkify와 Spannable이 그것이다. Linkify Linkify란 타겟으로 하는 TextView의 Text
OpenGraph? OpenGraph란 sns 혹은 앱에서 웹페이지를 공유하면 링크가 썸네일(미리보기)처럼 표시되는 경우를 종종 볼 수 있다. 웹페이지의 metadata에 해당 페이지의 간략한 정보(제목이나 이미지 등)들로 구성 되어있는 태그로 페이스북에서 만들었다고
BroadcastReciver(https://developer.android.com/guide/components/broadcasts?hl=ko시스템 이벤트가 발생 할 때마다 앱에 알려주는 리시버이다.반대로 앱에서 특정 이벤트를 다른 앱으로 알려주는 것도 가능
Clipboard(https://developer.android.com/guide/topics/text/copy-paste?hl=ko이름의 유래는 해당 사무도구에서 가져왔다고 한다.Android에서는 이 Clipboard에 대한 라이브러리를 지원한다.지금부터
실제 단말기로 테스트를 할 때주로 USB를 통해서 디버깅을 하는데테스트용 단말기라 항상 꽂혀있어도 무관하면 괜찮지만실제 사용중인 단말기라서 전화가 온다던지화장실을 갈 때 USB를 뺏다 꽂았다 하는 것이 여간 귀찮은 일이 아니다.이 불편함을 해소해줄 무선 디버깅을 오늘
현재 상태 가져오기 를 등록할 필요없이 현재 배터리 상태를 가지고 있는 Intent를 가져올 수 있다. 이제 이 를 가지고 다양한 정보를 가져올 수 있다. 정보를 가져올 때는 의 상수들을 이용해서 가져온다. 충전여부 기기가 현재 충전중인지 아닌지 알아낼 수 있다.
개요 App 내에서 웹페이지를 띄우고 싶을 때가 있다. 외부 브라우저에서 실행시켜도 되겠지만 사용자 입장에선 귀찮을 수도 있고 App 내에서 보여주는 것이 좀 더 깔끔해 보이기도 한다. 이때 WebView를 사용하여 App 내에서 웹페이지를 보여줄 수 있다. 쉽게 생
오늘은 Android Studio에서 Github 계정을 연동하는 방법을 알아보려고 한다.Android Studio에 Github 계정을 연동하면GUI 환경으로써 형상관리를 할 수 있어 매우 편리하다.우선 Github 계정을 연동하는 방법은ID와 패스워드를 통한 로그인
상태바의 색상을 바꾸고 싶을 때가 있다.아주 간단하다.themes.xml에서 BaseTheme에 추가해주면 된다.사실 이건 색상을 임의로 지정할 수 있는 것이 아니라이름에서도 알 수 있듯이 true일 경우밝은 상태바에 어울리게 폰트 색을 검정으로 바꾼다.마찬가지로 fa
개인 프로젝트를 만들고 있던 도중 앱이 종료되면 현재의 상태를 SharedPreference에 저장하고 앱이 실행되면 저장된 값에 따라 일련의 처리를 하도록 만들고 있는데 종료될 때 저장이 안된다 (..) 처음에 이렇게 코드를 작성했었는데 별 짓을 다해봐도 저장이 안
Activity 간 데이터를 주고 받을 때 객체를 주고 받아야 할 일이 있다.하지만 putExtra()에는 객체가 담기지 않는다.이때 필요한 것이 직렬화이다.직렬화를 하는 방법은 Serializable과 Parcelable 두가지가 있다.그리고 putExtra()의 p
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”안드로이드에는 공유하기라는 좋은 기능이 있다.간단한 텍스트나 이미지 등을 다른 앱으로 보낼
간혹 앱을 사용하다보면 스크롤 할 때툴바나 혹은 아래의 바가 사라지는 효과를 경험할 때가 있다.처음엔 애니메이션을 이용해서 hide 시키는 줄 알았는데Coordinator Layout을 사용하면 손쉽게 이를 구현할 수 있다.먼저 AppbarLayout을 사용하여 숨길
개요 Jetpack의 구성요소 중에는 Navigation이라는 컴포넌트가 있다. Fragment들의 전환 및 이동을 좀 더 쉽게 도와주는, 설계 해주는 컴포넌트로 FragmentTransaction을 통해서 replace 되던 기존의 방식을 대체한다. 구성요소 Nav
RecyclerView의 item들을 배치하는 방법은 Linear, Grid 2가지가 있다.Linearitem들을 선형으로 배치한다.Griditem들을 격자형으로 배치한다.각 Layout들은 HORIZONTAL(수평), VERTICAL(수평)를 모두 지원한다.생성자는
Fragment 간에 데이터를 공유하고 싶을 때가 있다.ViewModel이 등장하기 전 까지는 Activity에 값을 저장한 뒤Activity에 접근해서 데이터를 가져오는 방식을 썼지만ViewModel의 등장으로 더 간편하게 데이터를 공유할 수 있게 되었다.ViewMo
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Retrofit2를 이용해서 Rest 통신을 하다보면 고정적으로 Header를 달아야 할
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”간혹 Preference에 Json 데이터를 저장하고 싶을 때가 있다.Preference
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Room을 사용하다가 테이블에 대해서 수정이 필요할 때가 있다.단순히 Entity 클래스에
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Proguard는 대표적으로 2가지의 기능을 제공한다.난독화 코드 난독화를 통하여 디컴파일
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”URL이란 웹에서 http나 https로 시작하는 주소를 입력하면특정 서비스의 웹페이지로
Room을 사용하여 이미지(Bitmap)이나 Uri를 저장해야 할 때가 있다.이때 바로 저장하려고 하면 스튜디오에서 시뻘건 에러를 뿜어낸다.이때 Converter 클래스를 만들어서 RoomDatabase에 탑재해주어야 한다.여기서 Converter 클래스란 말 그대로
WebView를 사용하여 App을 만들 때Web과 통신을 하거나 Web의 LifeCycle을 제어하고 싶을 때가 있다.다행히 Android에선 이를 모두 라이브러리로 지원을 하고 있다.Web과 Javascript를 통해 통신을 할 수 있는 JavascriptInterf
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”우리가 스마트폰을 쓰면서 가장 많이 쓰이는 기능 중 하나는바로 알림이다.알림이 없다면 누가
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Application 클래스란 앱이 실행될 때 가장 먼저 인스턴스화 되는 클래스로 Laun
개요 개인 프로젝트를 하고있던 중 공유 기능이 필요해서 이미지 공유 기능을 작성하고 있었는데 낯익은 실선 하나를 발견했다. 아.. 하지만 놀랄 것 없다. 똑같은 이름에 매개변수가 하나 더 추가된 형태로 대체되었기 때문이다. >public T getParcelable
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.” BroadcastReceiver BroadcastReceiver란 시스템에서 발생하는
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”ANR이란 Application Not Responding의 준 말로말 그대로 앱이 반응이
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”QR코드를 스캔하여 웹뷰에 페이지를 띄워주는 앱을 만들고 있었다.근데 http url인 녀
개요 앱이 종료될 때에 맞춰 코드를 호출하고 싶을 때가 있다. 보통 에서 호출을 하면 되겠다고 생각했지만 이는 한계가 있다. onDestroy의 한계 Android Developer에서는 가 호출되는 경우를 아래와 같이 설명하고 있다. >1. The activity
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Android 앱을 개발하다보면 exception이 발생하여앱이 비정상적으로 종료될 때가
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”컴퓨터를 새로 장만했거나 작업환경을 새로 구성할 때가장 번거로운 것이 이전에 세팅해두고 편
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”플레이 스토어에 앱을 배포하기 위해서는 서명이 필요하다.이 서명을 해주는 파일이 바로 키스
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”앱을 개발하면 하나의 코드(프로젝트)로 여러 개의 앱을 만들어야 할 때가 있다. 그렇다고
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”회사에서 Glide를 사용하여 Bitmap으로 가져온 이미지를byteArray로 변환하여
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Retrofit을 이용해서 Rest API를 호출할 때요청과 응답을 로그에서 보고싶을 때가
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”런타임에서 minSDK, targetSDK가 필요할 때가 있다.gradle에서 BuildC
개요 앱에서 단말기의 사진을 가져올 때 SAF를 통해 사진을 가져왔다. Android 13부터는 PhotoPicker를 제공하여 사진을 더 쉽게 가져올 수 있게 되었다. PhotoPicker를 사용하려면 먼저 아래와 같은 선결 사항이 필요하다. 1.7.0 버전 이상
단말기에서 다크모드(나이트모드)를 활성화하면 앱도 다크모드가 활성화된다.다크모드 설정을 따로 해주었다면 문제가 없겠지만 특별한 설정을 해주지 않을 경우시스템이 프로젝트를 생성하면서 만들어지는 다크모드 기본값으로 색을 구성하여UI가 매우 어색해진다.다크모드에 맞게 색상값
지난번에 okhttp logging 방법을 포스팅했었는데 오늘은 이를 활용하여 더 보기좋게 가공하는 방법을 포스팅해보고자 한다.Okhttp client에 HttpLoggingInterceptor를 추가하여 요청과 응답에 대한 로그 출력을 하는 방법으로 지난 포스팅을 작
카카오톡 공유 API 사용법을 포스팅해보려고 한다.카카오톡에서는 대화방에 템플릿 형식으로 데이터를 공유하는 API를 제공한다.템플릿 종류는 유형에 따라 여러가지가 있으며이번 포스팅에선 간단하게 기본 템플릿을 이용하는 방식으로 포스팅 해보고자 한다.템플릿 종류에 따라 템
이전에 UncaughtExceptionHandler를 이용하여비정상종료 예외처리에 대해서 포스팅을 한 적이 있었다.당시 포스팅에선 발생한 Exception에 대해 Log만 출력하고 앱을 종료하는 예제를 작성했는데 이렇게 되면 UX면에서 부자연스럽다는 생각이 들어 개선을
비디오 파일로부터 썸네일을 가져오거나 이미지 파일의 해상도 등미디어 파일의 메타데이터를 가져와야할 경우가 있다.Android에서는 이를 쉽게 가져올 수 있는 라이브러리를 제공하는데MediaMetadataRetriever가 그것이다.간단하게 비디오파일의 해상도와 썸네일을
일전에 클립보드에 대하여 포스팅을 한 적이 있는데 샘플 소스로 텍스트를 예로 들어 작성했었다. 이번 포스팅에선 텍스트 외에 이미지(Uri)를 처리하는 방법을 작성해보고자 한다.ClipboardManager 사용법은 이전 포스팅 참고바랍니다.우선 코드는 Glide를 통해
회사에서 서비스하는 앱 중 에서 중국에서 앱이 간헐적으로 크래쉬 되는 현상이 있었다.원인은 서버로부터 FCM 토큰을 발급받지 못하여 Exception을 뱉어낸 것이다.중국은 인터넷 검열을 위해 국가적 차원에서 만리방화벽(GFW)이란 방화벽을 운영하는데 구글 서비스가 이
Android 프로젝트에는 assets 디렉토리를 생성할 수 있다.이 assets 디렉토리는 앱에서 사용해야할 파일을 미리 저장해놓고 앱 내에서 필요할 때 꺼내서 사용할 수 있도록 도와주는 디렉토리이다.우선 assets 디렉토리 만드는 방법부터 알아보겠다.main 패키
회사에서 서비스 중인 앱 하나를 유지보수하는데 Rest API 요청할 때 Exception을 뱉어내는 일이 발생했다.java.lang.runtimeexception: Stub!이걸로 무려 4시간을 삽질한 결과 원인은 Apache 라이브러리였다.Apache 라이브러리는
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”Android는 iOS에 비해 상대적으로 단말기 특성이 존재하는 편이다. 내가 가지고 있는
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”루팅(root + ing)이란 UNIX 계열 운영체제에서 최고 관리자 권한인 root 권한
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”일반적으로 잘 사용하지 않을 수 있지만 CPU의 아키텍쳐가 필요할 때가 있다. Androi
SAF와 PhotoPicker는 목적이 엄연히 다르기 때문에비교하는 것은 무의미할 수 있으나SAF에서 이미지파일의 Uri를 가져올 경우PhotoPicker에서 가져오는 이미지파일의 Uri와 차이가 다소 존재하는 것 같아 정리해보았다.SAF에서 반환하는 Uri의 특징은
“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”9월에 Play Console에 새로운 정책이 생긴 것을 발견했다.요지는 '사진 및 동영상