일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 큐 자바 코드
- 안드로이드 유닛테스트란
- rxjava disposable
- Rxjava Observable
- android ar 개발
- jvm 작동 원리
- 안드로이드 유닛 테스트 예시
- 안드로이드 라이선스 종류
- 안드로이드 레트로핏 사용법
- 안드로이드 유닛 테스트
- 객체
- 스택 자바 코드
- rxjava cold observable
- 2022 플러터 안드로이드 스튜디오
- 2022 플러터 설치
- 안드로이드 라이선스
- 자바 다형성
- ANR이란
- ar vr 차이
- 안드로이드 레트로핏 crud
- jvm이란
- 서비스 vs 쓰레드
- 클래스
- 멤버변수
- 스택 큐 차이
- android retrofit login
- 안드로이드 os 구조
- 플러터 설치 2022
- 서비스 쓰레드 차이
- rxjava hot observable
- Today
- Total
목록Android (341)
나만을 위한 블로그
코루틴을 다룰 때 Job이란 개념은 중요하게 취급된다. 아는 사람도 있겠지만 흔히 사용하는 코루틴 빌더 중 launch의 리턴 타입은 Job이다. public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit ): Job 이 Job은 대체 무엇인지 알아본다. 코틀린 공식문서에선 아래와 같이 설명한다. https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-..
이전 포스팅에서 앱 링크에 대해 알아봤으니 실제로 적용은 어떻게 하는지 확인한다. 프로젝트를 실행한 다음 Tools > App Links Assistant 순서로 클릭한다. 안드로이드 스튜디오 자체적으로 앱 링크를 설정하는 데 도움을 주는 장치가 있는데 이것을 사용해서 앱 링크를 프로젝트에 적용해 본다. 그러면 안드로이드 스튜디오 우측에 앱 링크 어시스턴트 화면이 표시된다. 매니페스트에 인텐트 필터 태그와 data, action, category 태그들을 자동으로 추가해 줄 URL Mapping Editor 실행 버튼과 앱 링크를 통해 앱이 실행되면 실행시킬 액티비티를 고르는 버튼 등이 보인다. 먼저 Open URL Mapping Editor 버튼을 누른다. 아직 앱 링크가 없으니 아래와 비슷한 화면이 ..
이전에 딥링크를 다루면서 구현 방식 중 하나로 앱 링크란 것을 말한 적이 있다. https://onlyfor-me-blog.tistory.com/791 딥링크(Deep link)란? 핸드폰에서 어떤 링크를 누르면 웹 페이지로 이동하는 경우도 있지만, 설치돼 있던 앱이 실행되면서 그 링크가 가리키는 특정 화면으로 이동하는 경우도 있다. 후자의 경우를 구현할 때 사용하 onlyfor-me-blog.tistory.com 이 포스팅에선 앱 링크에 대해 개략적으로 설명하고 넘어갔기 때문에 좀 더 앱 링크란 것에 대해 디벨로퍼를 확인하고 다른 사람들의 설명을 확인한다. 디벨로퍼의 설명이 잘 돼 있어서, 앱 링크를 확인하려면 먼저 디벨로퍼 공식문서를 싹 훑는 게 좋을 듯하다. https://developer.andr..
※ 이 글에선 실제 서버를 통하지 않고 에뮬레이터를 써서 인증번호를 전송한다 ※ 인증번호 입력 화면 코드는 생략한다 흔히 앱을 사용하다 보면 SMS로 인증번호가 전달되고, 난 그 인증번호를 앱에 입력해야 하는 경우가 있다. 이 때 유저가 SMS를 확인하지 않아도 자동으로 입력되게 하려면 아래와 같이 구현하면 된다. 먼저 앱 gradle에 라이브러리를 하나 추가한다. implementation "com.google.android.gms:play-services-auth-api-phone:18.0.1" 그리고 BroadcaseReceiver를 상속하는 아래 클래스를 구현한다. import android.content.BroadcastReceiver import android.content.Context im..
※ 파이어베이스 등록, Github Action 적용 과정은 생략한다 ※ Fastlane은 사용하지 않는다 앱을 만들었으니 APK 또는 AAB 파일을 만들어야 한다. 그러나 수동으로 만드는 것은 너무 번거로우니 Github Action을 통해 자동으로 APK가 발행되도록 할 수 있다. 그리고 이에 더해서 Firebase App Distribution도 적용하면, Github Action으로 APK 생성 후 배포까지 자동으로 이뤄지도록 CI/CD 환경을 구성할 수 있다. 빌드 환경이 dev, release로 나눠져 있어도 상관없다. 또한 Firebase App Distribution을 적용하는 건 좋지만, 가능하면 Github Action으로 APK가 만들어지면 알아서 Firebase App Distrib..
안드로이드에서 웹뷰를 다루려면 피할 수 없는 함수 중 하나가 shouldOverrideUrlLoading()이다. 이 함수는 WebViewClient 구현 시 재정의할 수 있는 함수인데, URL과 딥링크를 앱에서 다루기 위해 사용할 수 있는 함수다. 아래는 디벨로퍼에서 설명하는 shouldOverrideUrlLoading()이다. https://developer.android.com/reference/android/webkit/WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest) WebViewClient | Android Developers developer.android.com ..
BottomSheetDialogFragment(이하 바텀 시트)를 구현한 다음, 이 안에 웹뷰 등 스크롤 가능한 뷰를 넣고 아래로 스크롤하면 잘 된다. 그러나 위로 스크롤하면 스크롤됐던 뷰가 도로 올라가는 게 아니라, 바텀 시트가 밑으로 점점 내려간다. 이렇게 되면 아래 방향으로 스크롤은 가능하지만, 위로 다시 스크롤할 수 없는 바텀 시트가 만들어진다. 이걸 막으려면 어떻게 해야 할까? 바로 BottomSheetBehavior라는 클래스를 통해 isDraggable 프로퍼티에 true, false를 대입하면 된다. 무슨 소린가 싶을테니 코드부터 본다. 먼저 바텀 시트의 예시 코드다. import android.annotation.SuppressLint import android.os.Bundle impo..
예를 들어 아래와 같은 딥링크를 앱에서 받았다고 가정한다. symbol://enterWindow?header=header&otherKey=otherValue&url=https://example.co.kr/enter?a=123&b=456&c=789 만약 이 딥링크 중 url이란 key의 value를 가져와야 한다면 어떻게 해야 할까? 간단하게 아래와 같이 할 수 있다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val deepLink: Uri = "symbol://enterWindow?header=header&body=body&url=https://example.co.kr/enter?a=123..
이 함수에 대한 안드로이드 디벨로퍼의 설명은 아래와 같다. https://developer.android.com/reference/android/app/Activity#onNewIntent(android.content.Intent) Activity | Android Developers developer.android.com launchMode를 singleTop으로 설정한 액티비티에 대해 호출되거나, 클라이언트가 startActivity(intent)를 호출할 때 FLAG_ACTIVITY_SINGLE_TOP 플래그를 사용한 경우 호출된다. 두 경우 모두 액티비티가 시작되는 새 인스턴스 대신 액티비티 스택의 최상위에 있는 동안 액티비티가 재시작되면 onNewIntent()가 재시작하는 데 사용된 인텐트와 ..
안드로이드 관련한 내용을 찾아보다가 아래 포스팅을 발견했다. https://mashup-android.vercel.app/mashup-11th/heejin/useCase/useCase/ mGithubRepositories.value = ApiState.Error("${error.message}") } .collect { values -> mGithubRepositories.value = values } } } 조금 더 간결해지기는 했지만, 원래 예제 수준의 코드였기 때문에 큰 장점은 느끼지 못하겠다. 하지만 "객체명.함수명()" 형태가 아닌 "객체명()" 형태로도 그 객체의 함수를 호출할 수 있다는 것은 매력적으로 다가올 수 있는 요소다.