일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- RxKotlin
- rx
- MediaSession
- Reactive
- MotionLayout
- junit
- Observable
- SwiftUI Tutorial
- 동영상
- SWIFTUI
- Android 13
- node.js
- paging
- android13
- GCP
- Koin
- MediaPlayer
- mvvm
- 인앱결제
- 테스트 자동화
- Android
- php
- node
- Animation
- PagingLib
- databinding
- mysql
- list
- google play
- Today
- Total
목록android Tip (24)
봄날은 갔다. 이제 그 정신으로 공부하자

해당 글은 이전에 작성한 중복 클릭 방지의 후속편 입니다. https://als2019.tistory.com/51 시간차를 이용한 중복 방지는 사용자가 버튼을 난타했을 때 여러번 처리되는 문제를 해결할 수 있지만 네트워크와 같이 비동기로 처리되는 경우 시간차를 이용한 방식은 정답이 될 수 없습니다. 간단히 생각하면 아래와 같은 문제가 발생할 수 있기 때문 입니다. 로그인 버튼을 눌렀을 때 상세보기 버튼을 클릭 시 상세보기 화면으로 이동한다고 했을 때 시간차(1sec)를 이용한 중복 방지만 적용한다면 사용자가 로그인 버튼을 난타해도 1초 동안은 로그인 버튼이 다시 눌리는 일이 없으므로 로그인 화면은 1번만 활성화되게 됩니다. 아름답고 안전한 시나리오 입니다. ^___^ 하지만 네트워크 처리와 같은 비동기 ..

이번 글은 아래 글에 이은 2편 입니다. https://als2019.tistory.com/52 지난번 글에서 Scoped Storage에 대해 너무 뜬구름 잡듯이 설명하고 지나가서 저 스스로도 그래서 어떻게 저장소에서 이미지를 읽어오라는건데? 라는 질문일 들더라구요. 그래서 저장소에서 이미지를 읽어오느 샘플 소스를 직접 만들어 보았습니다. ^______^v 샘플 소스는 아래 git lepo에 있습니다. https://github.com/lee-kil-jae/MyGallery 샘플 소스 위주로 간략히 설명하도록 하겠습니다. 설명 전에… 해당 소스는 MVVM 패턴으로 제작되었으며 DI로는 KOIN을 이미지 라이브러리로는 coil을 사용하였습니다. 그외에 tedpermission 등 다양한 라이브러리를 사용..

깜빡하고 있었다. Android Q(10)의 보안 강화 Scoped Storage Android Q(10) 이전의 저장소 접근 권한은 사용자에게 EXTERNAL_STORAGE 권한만 얻으면 되었습니다. 권한만 얻으면 앱 및 단말의 파일 저장소에 접근하여 데이터를 읽고 쓸수 있었습니다. 하지만 Q에서 외부 저장소를 다루는 새로운 정책 Scoped Storage가 소개되었습니다 Scoped Storage는 기본적으로 앱이 디바이스의 모든 파일을 탐색하지 못한다는 전제가 깔려있습니다. Q부터는 앱이 자유롭게 접근할 수 있는 것은 자신의 개인 앱 데이터 뿐으로 공용 미디어 파일들은 READ_EXTERNAL_STORAGE 권한이 있어야 접근이 가능하고, 그 외의 파일들은 사용자에게 접근 권한을 개별로 받아야 합니..

일반 사용자는 개발자와 달리 버튼을 여러번 누르기 때문에 상용앱을 출시하기 위해서는 반드시 앱에 중복 클릭으로 인한 오작동을 막는 기능을 추가해주어야 합니다. 중복 클릭 방지는 쉬운 것 같지만 상황에 따라 다르게 처리해야 하는 경우가 많아 은근히 번거롭습니다. 상황에 따른 적절한 중복 클릭 방지 기술은 여러가지가 있지만 이 글에서는 간단히 시간 차이를 통한 중복 방지에 대해서 설명하겠습니다. 아래와 같이 상단에 검색 버튼이 있고 버튼 하단에 검색 결과가 리스트 형태로 보여지는 화면이 있는 경우를 예를 들면… 중복 클릭을 방지해야 하는 부분은 크게 두부분으로 나눌 수 있습니다. - 검색 버튼 중복 클릭 방지 - 리스트 아이템을 중복 클릭 방지 “검색 버튼 중복 눌림 방지” 서버에 검색 요청을 중복으로 하고..
앱을 개발하다보면 설정값 변경 등으로 초기화가 필요해 불가피하게 앱을 재실행해야하는 경우가 발생합니다. 이번 글에서는 앱을 재실행하는 방법에 대해 초간단하게 설명합니다. 아래 코드는 context를 가지고 있는 Activity를 기준으로 작성되었으며 PackageManager를 통해 앱 이름(PackageName)으로 Intent를 생성한 후에 해당 Intent로 부터 componentName을 가져오고 이걸로 Intent class에서 지원하는 makeRestartActivityTask()함수를 호출해 별도의 restartIntent를 만들고 startActivity()함수를 호출하면 앱이 재실행됩니다. val intent = packageManager.getLaunchIntentForPackage(p..

개발 중 조금 난해한 문제가 발생했습니다. 요구사항을 파악해보면 Spinner로 개발하는게 맞는데 Spinner로 개발하기에는 너무 많은 리소스가 소모된다는 문제가 발생했습니다. 그래서 이걸 어떻게할까 고민하다 우선 Adapter도 만들고 layout xml도 만들고해서 Spinner로 만들어보았습니다. 역시 만족스럽지 못했습니다. ㅠ_ㅠ 그래서 다른 개발자들이 만들어놓은 custom spinner를 찾아봤는데 미천한 검색 실력으로는 요구사항에 맞는 custom spinner를 찾을 수 없었습니다. 음… 어떡하지? 그냥 쿨하게 Button에 PopupWindow를 사용해서 개발하기로 했습니다. 요구사항 자체가 Spinner에 비교했을 때 난해한 문제였지 PopupWindow를 사용해 개발하면 그리 어려운..
이번 글에서는 android에서 기본으로 지원하는 AlertDialog를 활용하여 Dialog를 custom하는 방식에 대해 설명합니다. 저는 기본 AlertDialog가 좋은데 다른 사람들은 AlertDialog를 싫어하더라구요. ㅠ_ㅠ 일반 Dialog 만들기 android에서 지원하는 AlertDialog는 Builder(디자인 패턴의 Builder pattern 맞습니다.)를 지원하기 때문에 아래와 같이 간단히 dialog를 만드는 것이 가능합니다. 정말 심플하네요. AlertDialog.Builder(this) .setTitle("TITLE") .setMessage("MESSAGE") .setNegativeButton("NO", { dialogInterface: DialogInterface, i..
이번 글에서는 기존에 Java에서 사용하던 방식에 비해 많은 부분이 상이한 kotlin의 Callback 사용 방식에 대해 설명합니다. Java Java에서 callback을 사용하기 위해서는 interface를 선언해주고 콜백을 받는 곳에서 interface를 정의해주고 콜백을 호출하는 곳에서 콜백 인스턴스를 호출해주면 됩니다. 선언 및 정의 그리고 사용은 아래와 같습니다. // interface 선언 public interface MyCallback{ public void onClick() } // 콜백을 받는 곳에서 interface 정의 MyCallback callback = new MyCallback(){ @Override public void onClick(){ // Click~~~ } } /..