일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- studio
- 의존성주입
- Gradle
- Github
- 코틀린
- 깃헙
- RecyclerView
- Kotlin
- image
- error
- build
- 에러
- Android
- viewpager
- MVVM
- 안드로이드 스튜디오
- 안스
- 테더링
- 코루틴
- 웹뷰
- Retrofit
- 안드로이드스튜디오
- 레트로핏
- 유튜브
- 안드로이드
- WebView
- flow
- ADB
- coroutine
- 스튜디오
- Today
- Total
목록안드로이드 (150)
코딩하는 일용직 노동자

#1 기존 이용했던 식별자 정보 안드로이드 10 이전에는 기기의 고유 식별자정보를 얻기가 쉬웠습니다. 이 정보를 이용해 중복로그인을 막는다던지 1계정에 1기기로만 서비스 되도록 한는 처리가 가능했습니다. 주로 아래의 기기 식별자정보를 사용했습니다. 기기 시리얼 번호 Build.getSerial() 디바이스 ID TelephonyManager.getDeviceId() 유심 시리얼 넘버 TelephonyManager.getSimSerialNumber() IMEI TelephonyManager.getImei() MEID TelephonyManager.getMeid() 하지만!! 안드로이드 10(Q) 버전부터는 보안정책이 변경되어서 이 정보들을 얻을 수 없게되었습니다. OS가 10 버전 이상인 기기에서는 위의 ..

생성자 없이 ViewModel을 만들어 사용하는 것은 매우 간단합니다. 하지만 ViewModel을 이용하다보면 repository 나 인스턴스들을 파라메터로 넘겨서 생성하는 경우가 많습니다. 일단 간단히 name을 전달하는 ViewModel을 만들어 테스트 해보겠습니다. class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_view_model) try { var viewModel = ViewModelProvider(this).get(MyViewModel::cl..

MVVM 으로 개발할때 ViewModel은 View를 몰라야 합니다. (ViewModel을 만들고 사용하는 activity가 자신의 context를 넘겨주거나 하지 않습니다.) 때문에 ViewModel에서 View로 이벤트나 결과를 전달할 경우에는 View가 ViewModel을 observe 하다가 상태가 변하면 그에따른 처리를 하게 합니다. // ViewModel var resetList = MutableLiveData().apply { value = false } ... /** * Search 버튼 클릭 처리. */ fun onClickSearch() { if (!TextUtils.isEmpty(etStr)) { mPage = 1 resetList.value = true searchImage(etSt..

레이아웃을 수정한 후 앱을 재시작해보니 곧바로 죽는 현상이 발생했습니다. 로그를 보니 아래와 같은 에러메세지를 볼 수 있었습니다. All children of ConstraintLayout must have ids to use ConstraintSet 내용을 보니 ConstraintLayout 에서는 child layout 에 id가 항상 지정이 되어 있어야 한다는 것이었습니다. 소스를 보니 새로 추가한 레이아웃에 id가 지정이 안되어 있었고, id를 만들어주니 에러는 곧바로 해결됐습니다.

Kotlin Collections function fun get(index: Int): E 인덱스의 항목을 반환 fun clear() 모든 항목을 제거 fun indexOf(element: E): Int 지정된 항목의 인덱스를 반환 fun isEmpty(): Boolean 컬렉션이 비어있는지 반환 fun contains(element: E): Boolean 지정된 항목이 컬렉션에 포함되어 있는지 반환 fun subList(fromIndex: Int, toIndex: Int): List 시작 인덱스부터 끝 인덱스 -1 까지의 범위의 리스트를 반환 fun Iterable.all(predicate: (T)->Boolean): Boolean 모든 항목이 지정된 조건에 만족할 경우 true 반환 ex) list...

공지사항을 표시할 팝업을 만들려고 합니다. Dialog 안에는 뷰페이저가 있고 아이템으로는 ImageView 하나만 있는 Fragment 를 갖고 있습니다. ImageView의 height를 wrap_content로 설정하고 adjustBoundView = true로 설정했습니다. 하지만 뷰페이저의 height를 wrap_content로 설정을 해도 실제 구동시 match_parent로 표시되는 문제가 있습니다. 이를 해결하려면 ViewPager를 상속받은 CustomViewPager를 만들어서 onMeasure를 오버라이딩 해줘야 합니다. /** * 설명 : 일반적인 ViewPager 는 height 값이 화면 전체를 갖는다. * wrap_content 만큼만 갖게 하기 위해 onMeasure 를 오버..

최근 업데이트 후 멀쩡하던 new ViewModelProvider(this).get(MyAndroidViewModel.class) 에서 Cannot create an instance of class 에러가 발생했습니다. java.lang.RuntimeException: Cannot create an instance of class my.custom.viewmodel.CustomViewModel at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:202) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:135) at an..

라운드된 배경에 알맞게 view를 잘려 보이도록 처리하는 방법입니다. 흰색 라운드 배경위에 RecyclerView 를 배치했는데 배경의 라운드와 딱맞게 이미지가 가려져 보이도록 처리했습니다. https://youtu.be/d1BPxyT_Iog 실제 구현 영상 import android.content.Context; import android.graphics.Canvas; import android.graphics.Path; import android.graphics.RectF; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; /**..

유튜브를 웹뷰로 보여주도록 처리를 했는데 사이드 이펙트가 있었습니다. 전체화면 모드로 이동 후 복귀하면 웹뷰에 보여지는 화면 UI가 너무 이상하게 나오는겁니다. 또한 전체화면 모드에서 가로모드로 플레이가 되지 않습니다. 첨부된 소스를 이용하면 전체화면 모드시 가로모드로 전환해서 플레이가 됩니다. 또한 Back key 를 눌러 복귀해도 UI 상에 문제도 발생하지 않습니다. private fun setWebViewYoutube(wvYoutube: WebView, movieId: String) { wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pluginState = WebSettings.PluginState.ON } ..

유튜브에서 url을 공유할때 보면 www.youtu.be/nA8PosPb70c 이런식으로 url 이 클립보드에 복사됩니다. 이걸 웹뷰에서 열면 영상 뿐만 아니라 좋아요 버튼같은 유튜브의 다른 불필요한 UI도 화면에 표시됩니다. 웹뷰에 유튜브 영상 알맹이만 꽉차게 표시하고 싶으면 웹뷰에 www.youtube.com/embed/영상아이디 이렇게 하면 됩니다. 영상아이디는 유튜브 공유 URL 의 가장 마지막 / 뒤에 영문+숫자가 아이디입니다. www.youtube.com/embed/nA8PosPb70c 이렇게 호출시키니깐 웹뷰 화면에 영상이 꽉 차게 표시 됩니다. ^^ wvYoutube.settings.apply { javaScriptEnabled = true setAppCacheEnabled(true) pl..