일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체
- 안드로이드 유닛 테스트 예시
- 서비스 쓰레드 차이
- 스택 큐 차이
- 플러터 설치 2022
- 안드로이드 레트로핏 사용법
- 2022 플러터 설치
- 안드로이드 라이선스 종류
- 큐 자바 코드
- 안드로이드 유닛 테스트
- jvm 작동 원리
- 안드로이드 유닛테스트란
- ANR이란
- jvm이란
- Rxjava Observable
- 안드로이드 라이선스
- 2022 플러터 안드로이드 스튜디오
- 서비스 vs 쓰레드
- rxjava cold observable
- 안드로이드 레트로핏 crud
- android ar 개발
- rxjava disposable
- 클래스
- 멤버변수
- 스택 자바 코드
- android retrofit login
- ar vr 차이
- 안드로이드 os 구조
- rxjava hot observable
- 자바 다형성
- Today
- Total
목록Android (402)
나만을 위한 블로그

웹뷰를 사용하다 보면 인텐트 스킴(scheme)을 써서 다른 앱을 실행해야 하는 경우가 있다. 그러다 매니페스트 또는 앱에 정의되지 않은 스킴이나 잘못된 스킴을 호출하면 웹뷰가 해당 스킴을 인식하지 못해 아래 화면이 표시된다. 이 에러가 발생할 경우 shouldOverrideUrlLoading()으로 받는 URL을 로그로 확인해 보면 "intent://"로 시작한다. 왜 이런 에러가 발생하는 건가? 그 이유는 안드로이드 4.4부터 웹뷰가 Chromium 기반으로 바뀌었는데, 이 과정에서 IntentURI를 지원하지 않게 되었다. 때문에 안드로이드 개발자가 URL을 처리하는 로직을 직접 구현해야 한다. 대신 아래 로직만 추가하면 웹뷰에서 결제 시 V3 백신 앱을 실행하거나 V3 앱이 설치돼 있지 않으면 스..
라이브러리를 사용할 수 없는 때가 오면 순수 로직으로 커버쳐야 할 때가 언젠가 발생할 수 있다. 라이브러리에 의존하기 쉬운 것 중 하나가 권한인데, 이 포스팅에선 라이브러리 없이 권한을 요청하고 그에 따라 텍스트뷰, 이미지뷰의 글자, 이미지를 각각 바꾸는 예제를 포스팅한다. 데이터 바인딩과 hilt, StateFlow를 사용해서 예제를 구성해 봤다. 예제에 너무 과한 스펙을 입히는 것 같긴 한데, 내 블로그에 쓰는 포스팅이니 내 맘대로 할란다. 나만을 위한 블로그니까 먼저 drawable 패키지에 allowed, not_allowed라는 이름의 아무 이미지나 추가한다. 대충 권한이 허용됐구나, 안 됐구나를 알 수 있는 간단한 드로어블이면 상관없다. 그리고 뷰모델을 간단하게 구성한다. import andr..
24.07.20) 영상 크기 오류로 인해 영상 제거 안드로이드 13부터 WRITE_EXTERNAL_STORAGE 권한을 요청하면 무조건 거부된다. 그래서 오늘 날짜 기준으로 저번주에 이미지 선택 라이브러리로 자주 사용하는 TedBottomPicker에 이와 관련된 이슈가 올라왔다. https://github.com/ParkSangGwon/TedBottomPicker/issues/155 android 13 WRITE_EXTERNAL_STORAGE 퍼미션 문제 · Issue #155 · ParkSangGwon/TedBottomPickerandroid 13에서 WRITE_EXTERNAL_STORAGE 퍼미션 문제가 발생합니다.github.com 앱 gradle에서 targetSdkVersion을 33으로 올린..
※ 이 포스팅은 SteteFlow와 SharedFlow를 알고 있는 것을 전제로 한다 이 포스팅은 아래의 미디엄 포스팅을 번역한 글이다. https://medium.com/@mortitech/sharedflow-vs-stateflow-a-comprehensive-guide-to-kotlin-flows-503576b4de31 SharedFlow vs. StateFlow: Best Practices and Real-world examples Dive into the world of Kotlin flows with this in-depth comparison of SharedFlow and StateFlow. Here’s an overview of both types of flows… medium.com 먼저..
먼저 앱 gradle에 라이브러리 의존성을 추가한다. implementation(platform("androidx.compose:compose-bom:2023.06.01")) 그리고 적당한 이미지를 하나 준비하고 drawable 폴더에 넣어둔다. 아래는 액티비티의 전체 코드다. import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.f..

리스트에 여러 아이템을 불러올 때 대개 로딩 시간이 걸리기 마련이다. 이 때 흰 화면만 덩그러니 띄워두면 유저는 데이터를 불러오는 중인지 에러가 난 건지 모를 수밖에 없기 때문에 로띠 애니메이션을 돌리는 등의 데이터를 불러오고 있다는 애니메이션을 표시한다. 흔히 스켈레톤 뷰라고도 하는 기법도 유저에게 로딩 중임을 표시하는 방법인데, 이 포스팅에선 별도 라이브러리 없이 순수 컴포즈만으로 이를 구현하는 방법을 포스팅한다. 먼저 파일을 하나 만든다. import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.infiniteRepeatable import androidx.compose.animation.cor..

※ 이 포스팅의 코드는 예제 수준이기 때문에 실제로 사용하려면 반드시 리팩토링해서 사용하자 앱에서 채팅을 구현하려면 웹소켓, 파이어베이스 등 여러 방법이 있다. 하지만 SaaS를 사용해 채팅을 구축할 수도 있는데 그 방법 중 하나가 샌드버드라는 회사에서 제공하는 SDK와 API를 사용해서도 가능하다. https://sendbird.com/ A complete in-app chat API and SDK platform Retail & travel Sendbird helps retailers connect buyers and sellers within the mobile app to increase conversions and engagement, while boosting retention with bet..

안드로이드 스튜디오를 Giraffe 버전으로 업데이트 후, 다른 개발을 하다가 갑자기 계측 단위 테스트를 만들 일이 생겨서 기존에 작성한 Instrumented Test 파일들을 실행했더니 저 에러가 발생하면서 어떤 테스트도 실행되질 않았다. 로그캣에는 로그들이 표시되는 걸 보니 아예 작동을 안 하는 건 아닌 듯해 보였다. 해결법은 아래 디벨로퍼 공식문서를 참고해서 gradle 버전을 변경하면 된다. https://developer.android.com/studio/releases/gradle-plugin?hl=ko#updating-gradle Android Gradle 플러그인 출시 노트 | Android 개발자 | Android Developers Android 스튜디오 빌드 시스템은 Gradle을 ..

여러 아이템들이 표시되는 화면의 맨 위에서 계속 스크롤을 시도하면 위에서 재활용 아이콘이 나오고, 이 때 손을 떼면 화면에 표시되는 데이터들을 새로고침하는 기능이 있다. 안드로이드에선 이를 Swipe Refresh라고 부른다. 이 포스팅에선 컴포즈에서 이걸 구현한 예제 코드를 확인한다. 먼저 이 예제에서 사용한 라이브러리는 현재 deprecated 되었음에 주의한다. 그래서 실제로 사용한다면 이 라이브러리 대신 다른 걸 사용하는 게 맘 편할 것이다. 여기선 예제 포스팅이기 때문에 그냥 사용했다. implementation("com.google.accompanist:accompanist-swiperefresh:0.27.0") 그리고 뷰모델을 만든다. import androidx.lifecycle.ViewM..
먼저 뷰모델 의존성을 추가한다. implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1") 그리고 뷰모델을 만든다. 별다른 API 통신 없이 뷰모델 사용법만 보여주기 위해 간단하게 작성했다. import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.Color import androidx.lifecycle.ViewModel class MyViewModel: ViewModel() { var backgroun..