안드로이드 11

안드로이드 PIP 모드 커스텀 버튼 추가

안드로이드 PIP 모드에서 커스텀 버튼을 추가하는 방법 1. PendingIntent.getActivity 를 이용해 onNewIntent 에서 action 에 대해 기능 정의 방법 예제 코드private fun enterPipModeWithActions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val aspectRatio = Rational(16, 9) // PIP 모드에서 사용할 액션 버튼 정의 val intent = Intent(this, PipActivity::class.java).apply { action = "ACTION_DO_SOME..

안드로이드 PIP 모드 설정

안드로이드에서 Picture-In-Picture 모드로 현재 화면과 독립적으로 움직일 수 있는 Activity 를 띄울 수 있습니다.코드 중심으로 설명을 하겠습니다.1. PIP 모드를 사용할 Activity 클래스 생성package im.metrex.oa.features.sendbirdimport android.app.PictureInPictureParamsimport android.content.res.Configurationimport android.net.Uriimport android.os.Bundleimport android.util.Rationalimport androidx.activity.ComponentActivityimport androidx.activity.OnBackPressedCal..

삐져나오는 이미지 영역을 감싸는 방법

예시로 위와 같은 이미지 위로 투명도가 있는 액체이미지를 넣으려고 합니다. 하지만 액체 이미지는 radius 가 없어서 담기는게 아닌 삐져나오게 됩니다. ex.)   그래서 어떻게 하면 저 이미지 안으로 액체 이미지를 넣을 수 있을까 고민을 했습니다. 1. 해당 이미지를 ViewGroup 으로 감싸서 나오지 않게 해봤지만 결론적으로 ViewGroup 의 width 나 height 를 결국 저 사이즈에 맞게 늘리면 삐져 나오는건 마찬가지였습니다.  2. ViewGroup 으로 감싸되 CardView 를 사용하면 가능했습니다.  CardView 를 부모뷰로 감싸면 이미지와 같이 그 영역 만큼 이미지가 잘려서 들어갈 수 있습니다.  코드   주의할점!CardView는 기본적으..

CreateChooser 로 특정 패키지만 띄우는 방법

공유하기 기능을 개발 시 chooser 에서 지정한 앱 패키지들만 보이게끔 처리 하기 원할 때가 있을 것이다. 그럴 경우 chooser 에 특정 앱 패키지만 지정하여 보이게 처리를 할 수 있다. val facebookIntent = Intent(Intent.ACTION_SEND) facebookIntent.type = "text/plain" facebookIntent.putExtra(Intent.EXTRA_TEXT, "여기에 공유할 텍스트를 입력하세요.") facebookIntent.setPackage("com.facebook.katana") val chooserIntent = Intent.createChooser(facebookIntent, "텍스트 텍스트") startActivity(chooserIn..

카카오뱅크 대규모 공채 후기

이번 3월에 카카오뱅크에서 대규모 공채를 한다는 얘기를 지인을 통해 들었다. 이직을 준비하고 있던 찰나에 한번 밑져야 본전이니 지원해볼까? 하고 날짜를 확인 했다. 3월 12일까지 마감이었고, 마감 전날 까지도 지원할까 말까 고민을 많이 했었다. 지원서에 자기소개 적는 란이 없어서 경력위주의 내용만 적으면 되겠구나 싶어서 마감날에 밑져야 본전인셈 치고 지원을 했다. 주변에 생각보다 많이 지원하길래 쉽지 않겠구나 생각하고 그냥 잊고 있었다. 그러던 와중에 갑자기 문자가 날라왔다. 어??? 이건 뭐지??? 처음으로 카카오 계열사에 서류를 합격했다..... 주변에 지원한 지인들이나 개발 단톡방등에서도 합격하신분들이 꽤 있었다. 아 이번엔 그래도 서류를 꽤 합격시켰구나 라고 생각을 했다. 그리고 다음날... 과..

개발 일기 2023.05.08

[android/안드로이드] CleanArchitecture(클린아키텍처) 간단하게 정리

클린아키텍처에 대해서는 많이들 들으셨을거라 생각합니다. 저 또한 클린아키텍처에 대해서 찾아보게 되면 정말 많은 자료와 이게 뭐라고 딱 정의하기가 쉽지 않았습니다. 제가 찾아보며 공부했던 내용을 간단하게 요약해서 정리해보겠습니다. 클린 아키텍처란? 로버트 C.마틴(엉클 밥) 에 의해 만들어진 철학으로, 소프트웨어의 관심사를 계층별로 분리하는 디자인 철학입니다. 여기서 가장 중요한 내용은 관심사의 분리! 입니다. 관심사를 분리하게 되면 클래스 간의 의존성을 느슨하게 하면서 모듈화가 가능해집니다. 안드로이드 관점에서의 클린아키텍처 구조를 먼저 보여드리겠습니다. 현재 사진을 보시면 Presentation Layer , Domain Layer , Data Layer 로 각 관심사별로 분리를 하였으며 각각의 lay..

[android/안드로이드] flow flatMapConcat 사용하기

flatMapConcat flatMapConcat 은 flow 간의 연결이 필요할 때 사용하는 연산자 입니다. 아래에서 예시를 들어보겠습니다. 먼저 클린 아키텍처 구조에 viewModel 에서 api 를 호출하는 경우라고 생각하겠습니다. 서버로부터 token을 가져와서 token을 실어서 다른 api 를 호출하는 경우라고 생각해보겠습니다. 그렇다면, 1. token 을 가져오는 api 하나 2. token 을 실어서 호출하는 api 하나 이렇게 두가지의 데이터 스트림을 형성해야 합니다. 즉 , flow 가 두개가 필요하고 이 flow들을 순서대로 연결하기 위해 flatMapConcat을 사용해보겠습니다. @Test fun `FlatMapConcat 테스트`() = runTest { /** 서버로부터 to..

[android/안드로이드] Android 4대 컴포넌트

Android 앱에는 앱을 구성하는 크게 4가지 종류의 컴포넌트가 있습니다. 각각의 컴포넌트는 하나의 독립된 형태로 정해진 역할을 수행합니다. 4대 컴포넌트에는 Activity , Service , Broadcast Receiver , Content Provider 이렇게 있습니다. 1. Activity UI를 담당하는 대표적인 컴포넌트입니다. 2. Service 화면에는 존재하지 않지만 백그라운드에서 실행이 되는 컴포넌트입니다. 예를들어 음악을 재생하거나 , 파일 입출력을 수행하거나 , 네트워크 트랜잭션등을 처리할 수 있습니다. 서비스의 종류로는 백그라운드 , 바인더 , 포그라운드 이렇게 3종류가 있습니다. 백그라운드 : 사용자에게 직접 보이지 않는 작업을 수행합니다. 어플리케이션을 꺼도 백그라운드 서..

안드로이드 2022.04.14

[android/안드로이드] emulator skin 변경 방법

1. Samsung Developers 사이트를 접속한다. 계정 로그인을 한 후 위의 Emulator Skin 을 클릭 합니다. 원하는 디바이스의 스킨을 다운받습니다. 2. 다운 받은 파일을 압축을 푼 후 디바이스 스킨 폴더가 있는 곳에 저장 skin 이 저장 되어있는 폴더의 경로는 C:\Users\사용자이름\AppData\Local\Android\Sdk\skins 입니다. 이곳에 아래와 같이(여기선 S22 Ultra로 예를 들겠습니다.) 폴더를 저장해줍니다. 3. Android Studio 에서 Custom Skin 을 설정해준다. 먼저 android studio 에서 Tools -> AVD Manager 를 갑니다. Create Virtual Device 를 클릭 합니다. 위와 같이 New Hardw..

안드로이드 2022.03.25

[android / 안드로이드] dpToPx() , pxToDp() 구하기

이전 글에서는 px과 dp 와의 관계를 정의하고 dpi라는 개념에 대해서도 알아봤습니다. 이번 글에서는 px 과 dp 와의 관계를 통한 실제 안드로이드에서 dpToPx() , pxToDp()를 정의하도록 해보겠습니다. 이전 글에서 px = dp × density 라는 관계식이 있다고 했습니다. 이를 바탕으로 dpToPx 메서드와 pxToDp 메서드를 정의하겠습니다. (density = 내 디바이스 dpi / 160) 정의하기 앞서 예를 들기 위해서 내 디바이스는 Pixel 3 XL(560dpi) 를 사용했습니다. 1. dpToPx() 정의 private fun dpToPx(context: Context , dp : Float) { val px = TypedValue.applyDimension(TypedV..

안드로이드 2022.03.19