본문 바로가기

전체 글

(32)
LocationManager와 FusedLocationProvider의 차이점 스마트폰에는 여러가지 센서들이 내장되어 있고, 그 중 GPS를 활용한 위치정보는 광범위하게 사용되는 정보이다. 안드로이드 디바이스에서 위치정보를 가져오기 위해서는 LocationManager나 FusedLocationProvider를 사용한다. LocationManager Android - LocationManager Periodic updates of the device's geographical location. or to be notified when the device enters the proximity of a given geographical location. LocationManager는 Android Framework에서 디바이스의 위치정보를 획득하기 위해 지원하는 API 입니다. 일정한..
DPI, DP, PX, SP 단위의 정확한 정의 DPI (Dot Per Inch) 1인치당 픽셀의 수를 표현한다. 1 inch (2.54cm)에 몇 pixel이 들어가는가를 의미한다. ldpi - Low density (120dpi) mdpi - Medium density (160dpi) hdpi - High density (240dpi) xdpi - Extra high density (320dpi) 1인치 단위에 많은 픽셀이 들어가게 되면 고해상도가 될 것이다. px - 스크린의 실제 단위 screen pixels를 나타내는 단위이다. 실제 크기나 밀도와 관계없이 고정된 픽셀 단위를 의미한다. mdpi(160dip)에서 1dp = 1px 이 기준이된다. ldpi - 1dp = 0.75px mdpi - 1dp = 1px hdpi - 1dp = 1.5p..
서버의 응답에서 원하는 부분만 필터링하기 대다수의 애플리케이션에서 네트워크를 사용하는 것은 필수가 되었습니다. 이 때 REST API를 통해 주고 받는 데이터는 주로 JSON 타입을 사용합니다. 그리고 안드로이드에서 서버 통신을 위해 가장 많이 사용하는 네트워크 라이브러리는 Retrofit, OkHttp, Gson 조합일 것입니다. 라이브러리 공식 소개 문서 Retrofit : https://square.github.io/retrofit/ OkHttp : https://square.github.io/okhttp/ Gson : https://sites.google.com/site/gson/gson-user-guide#TOC-Overview What is Retrofit? 간략히 소개하면, Retrofit 타입-세이프하게 HTTP 네트워크 응답을 ..
클린 아키텍처와 데이터 모델들 클린 아키텍처에 관한 글을 읽어보면, 크게 3가지의 레이어층으로 구분하여 코드를 작성하는 것을 권장하고 있다. Presentation Layer 사용자에게 정보를 표현해주는 일을 담당한다. 사용자의 입력을 받아들이는 일을 담당한다. Domain Layer 데이터 요청의 흐름을 관리한다. 핵심 비즈니스 로직을 수행한다. Data Layer 데이터를 Persistence하게 저장하는 것을 담당한다. 각 레이어 별로 Separation of concerns 규칙을 적용하여, 책임 범위를 확실히 나눈 뒤 경계를 지켜가면서 구현을 해 나가는 것이다. Presentation 계층은 사용자와 가장 가까운 계층으로 사용자에게 데이터를 보여주고, 사용자 입력을 받는 역할 이외에는 관여하지 않는다. Domain 계층은 애..
Project: 들숨날숨 "들숨날숨"은 한국환경공단 OPEN API로 부터 미세먼지 등 대기환경 정보를 받아서 표현해주는 안드로이드 애플리케이션입니다. 관련링크 플레이스토어 Github: 미세먼지정보 앱 - 들숨날숨 목표 REST API에서 데이터를 받아서 사용하는 방법을 학습합니다. MVVM 패턴을 사용해서 코드를 분리하기 위해 노력합니다. Dagger를 사용해서 Dependency Injection을 적용합니다. 프로젝트는 모두 Kotlin을 이용해서 작성합니다. 실제로 동작하는 하나의 앱을 처음부터 끝까지 완성시켜봅니다. 아키텍처 View Layer : 사용자에게 보여지는 화면을 구성하는 로직을 처리합니다. ViewModel은 Activity와 Fragment가 뷰를 그리는데 필요한 데이터를 가져오고 보관하는 역할을 합니다..
SearchView에서 Soft Keyboard 보여주기 SearchView가 포함되어 있는 화면에서는 화면에 진입하자마자 소프트 키보드를 보여주어 사용자에게 자연스러운 입력을 유도할 수 있다. 그렇기 때문에 SearchView나 EditText를 가진 화면에서 소프트키보드가 팝업되는 것은 중요한 요소이다. SearchView가 Focusable하게 만들기 우선 SearchView에서 소프트 키보드를 보여주기 위해서는 해당 뷰에 Focus를 지녀야한다. 우선 xml에서 focusable을 지정하거나 클래스 내에서 매뉴얼하게 지정해준다. searchView.setFocusable(true) SearchView에 Focus가 이동한 것을 감지하는 리스너 등록하기 그 다음은 SearchView에 focus가 되었을 때를 인지하는 리스너를 등록해야한다. searchV..
Android Permission 요청하기 Permission의 종류 안드로이드에는 두 종류의 권한이 있습니다. 첫째는 사용자에게 따로 권한 승인 여부를 묻지 않고, 설치 시간에 권한을 부여받을 수 있는 설치 시간 권한(Install-time permissions)입니다. 위 종류에 해당하는 권한은 Manifest에 선언하기만 하면, 앱 설치와 동시에 사용할 수 있는 권한들입니다. 두번째는, 런타임 권한(Runtime-permission)입니다. 위와 같은 다이얼로그를 통해 사용자에게 직접 권한 승인을 요청하여 권한을 부여받습니다. 주로 개인정보에 접근할 수 있는 권한을 런타임 퍼미션으로 분류하고 있습니다. 안드로이드 퍼미션의 종류는 Permission list에서 확인할 수 있습니다. 런타임 퍼미션 마시멜로우 버전(API 23) 이상 버전부터는..
UI Component 분리시키기 앞에서 살펴본 것을 바탕으로 유저와의 인터랙션을 담당하는 UI Component를 액티비티에서 분리시키는 작업을 진행해보았다. UI Component의 역할 사용자의 입력(e.g. 버튼 클릭)을 수신한다. 입력을 상위 레이어 Activity에게 보고한다. 그리고 Activity가 bind하는 결과값을 UI에 반영되도록 업데이트한다. 목표 구현해야할 기본적인 NavigationDrawer의 기능 Navigation Drawer를 열고 닫을 수 있다. Drawer의 아이템을 클릭할 수 있다. Activity는 클릭된 Drawer 아이템을 보고받는다. 디자인 android.widget 패키지만 분리한 클래스들은 `WidgetView`라는 postfix규칙을 사용하여 이름을 짓는다. NavDrawerWidget..