목록Android (60)
Foggy day
이번 포스팅에서는 부트앱을 만들어보겠습니다. 부트앱은 디바이스의 전원이 켜졌을 때 실행되는 앱을 말합니다. 1. BootApp Reciever 만들기 2. Manifest 설정 3. 권한 요청 1. BootApp Reciever 만들기 Boot App을 만들기 위해서는 BroadcastReceiver를 추가해야 합니다. 디바이스의 전원이 켜지면 onReceive 함수에 진입하게 되고, Intent를 사용해서 원하는 Activity를 실행시킵니다. 그런데 Android OS 10 이상부터는 SYSTEM_ALERT_WINDOW 권한이 필요합니다. BootApp Receiver에서는 Settings.canDrawOverlays 함수를 사용해서 권한이 허용됐는지 아닌지만 체크합니다. 비허용이라면 return 함..

이번 포스팅에서는 안드로이드 런처앱을 만들어보겠습니다. 런처앱을 만들게 된 계기는 참여했던 프로젝트에서 디바이스가 켜졌을 때 아무것도 없는 화면을 보여줘야 했기 때문입니다. 기본적으로 Android Os가 제공하는 런처에는 시스템 앱들을 보여주고 있습니다. 하지만 프로젝트에서는 디바이스를 실행시켰을 때 기본적으로 설치된 시스템 앱들은 숨기고, 비어있는 화면만 보여줘야 했습니다. 그리고 해당 비즈니스에서 사용할 애플리케이션은 Boot App으로 만들어서 실행시켜야 했습니다. 이때 아무것도 없이 비어있는 화면을 보여주기 위해서는 런처앱을 만들어야 했습니다. 참여했던 프로젝트에서는 앱 목록을 보여주는 기능은 없었지만, 예제에서는 설치된 앱 목록들을 보여주고, 클릭했을 때 앱을 실행시키는 기능도 추가했습니다. ..
런타임(Runtime) 애플리케이션을 관리(메모리, 프로세스)하기 위해 컴파일러나 가상머신이 사용하는 기존 코드 라이브러리 혹은 프로그램이 실행되고 있는 동안의 동작 런타임 환경(Runtime Environment) 애플리케이션을 위한 서비스를 제공하는 가상머신 상태 안드로이드 런타임이란?(ART) ART의 주요 기능은 크게 세가지가 있다. 1. AOT(Ahead Of Time)나 JIT(Just In Time) 컴파일 2. 최적화된 가비지 수집 CG 3. 전용 샘플링 프로파일러, 상세 진단 예외 및 크래시 보고, watchpoint를 생성하여 특정 필드를 모니터링 할 수 있는 기능을 포함한 디버깅 기능 지원 일반적인 컬파일러 언어는 CPU와 플랫폼 환경에 맞춰 기계어로 컴파일된다. 즉 인간이 이해할 수..
private fun setViewPager2Height(){ viewPager2.setPageTransformer { page, position -> updatePagerHeightForChild(page, viewPager2) } } private fun updatePagerHeightForChild(view: View, pager: ViewPager2) { view.post { val wMeasureSpec = View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.EXACTLY) val hMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) view.me..

class KotlinPlayGroundActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_kotlin_play_ground) introduce() hungry.start() age() //GlobalScope.launch는 thread와 비슷한 기능 // launch는 코루틴의 빌더이며 빌더를 사용하기 위해서는 scope가 필요하다 // GlobalScope는 scope중의 하나 //delay는 suspend 함수로 일시중단같은 개념, suspend 함수는 scope 안에서거나 백그..

val value = object { val x = 0 val y = 10 val z = 20 } println("value x : ${value.x}, y : ${value.y}, z : ${value.z}") //// value x : 0, y : 10, z : 20 val school: School = object : School(3), ClassGroup { override val students: Int get() = super.students override fun OnJoinClassGroup(classNumber: Int) { super.OnJoinClassGroup(3) } } println("school.students ${school.students}") //// school.stud..

val list = listOf(3, 4, 5, 6, 7, 8, 9, 10) val value = 12 val result = when (value) { in list -> "value is in the list" in 1..10 -> "It is in the range A" in 10..20 -> "It is in the range B" else -> "none fo the above" } println("result : $result") //result : It is in the range B val array = arrayOf("A", "B", "C", "D") for (i in array.indices) { println("i : ${array[i]}") } // A, B, C, D for ((i..
when you use a animation in a fragment transaction, screen would flicker. It is caused because of animation drawable. If you use animation drawable like below, obviously flickering occurs slide_in_right.xml The cause is set. Remove

val intSrc = Observable.just(1, 2, 3) intSrc.subscribe(::println) val strSrc = intSrc.map { value -> value * 10 } strSrc.subscribe(::println) val src = Observable.just("A", "B", "C", "D") src.flatMap { s -> Observable.just(s + 2, s + 3) } src.subscribe(::println) val flatMap = Observable.range(2, 3).flatMap { x -> Observable.range(1, 9).map { y -> String.format("%d*%d=%d", x, y, x * y) } } flatM..

val source = Observable.create { emitter: ObservableEmitter? -> emitter?.onNext("Hello") emitter?.onNext("android") emitter?.onComplete() }.subscribe(::println) // source.subscribe(::println) val source = Observable.just("Hello", "android") source.subscribe(::println) val stringList = listOf("A", "B", "C") val source = Observable.fromArray(stringList) source.subscribe(::println) val stringArrayL..