분류 전체보기
-
Room DB 사용하기안드로이드 2020. 6. 30. 10:32
Room DB는 SQLite를 이용해 앱 내부 데이터베이스를 구축하고 사용하는 데 도움을 주는 라이브러리이다. Android 에선 SQLite 라는 DBMS로 데이터를 저장할 수 있다. 물론 Room DB 가 아닌 자체 API만으로도 충분히 데이터베이스에 데이터 저장과 접근이 가능하다. 그럼 왜 Room DB를 쓰는 것일까? 우리가 DB에 저장해야 할 데이터 양이 많다고 가정했을 때, 이 데이터들이 서버가 아닌 로컬에 유지된다면 우리는 서버에 직접 연결해 데이터를 가져오는 것보다 훨씬 빠르게 데이터에 접근할 수 있고, 오프라인 상태일때도 여전히 해당 데이터에 접근이 가능하게 된다. ( 출처 : https://developer.android.com/training/data-storage/room?hl=ko..
-
Android Exoplayer 제스쳐 기능 추가안드로이드 2020. 5. 8. 16:28
네이버 TV 앱을 보면 영상 재생 시 화면 중앙을 기준으로 왼쪽 화면에서 위아래로 드래그 하면 밝기가 조절되고 오른쪽 화면에서 위아래로 드래그 하면 미디어 볼륨이 조절되는 기능이 있다. 꼭 필요한 기능은 아니지만 있으면 편리한 기능이라고 생각해 이를 구현해보기로 하였다. 가장 먼저 터치 이벤트를 받아야 한다. 이벤트를 받아야 볼륨을 조절하든 할테니까. playerView.setOnTouchListener { _, motionEvent -> when (motionEvent.actionMasked) { MotionEvent.ACTION_DOWN -> { true } MotionEvent.ACTION_UP -> { true } MotionEvent.ACTION_MOVE -> { true } else -> su..
-
[Kotlin] 함수형 프로그래밍안드로이드 2020. 4. 1. 16:56
오늘부터 코틀린 공부를 시작했다 코틀린에선 함수형 프로그래밍 기법을 자주 사용한다고 하니 관련된 내용을 정리해보기로 했다. 1. 함수형 프로그래밍이란? 순수함수를 이용해 코드를 작성하는 프로그래밍 기법을 말한다. 람다식과 고차 함수를 사용한다. 2. 용어 정리 순수함수 : 이름에서 힌트를 얻을 수 있듯이 함수 외부의 값을 참조하지 않고 변경하지도 않는 동시에 같은 인자에 대해 항상 같은 값을 반환해주는 함수 fun multi(x: Int, y: Int): Int { return x*y } 람다식 : 이름이 없는 함수 형태의 식 { x, y -> x * y } 다른 함수의 인자로 넘기거나 함수의 반환값으로 사용됨 고차함수 : 다른 함수를 인자로 사용하거나 함수를 반환값으로 사용하는 함수 fun addAnd..
-
Android Exoplayer 플레이리스트안드로이드 2020. 3. 17. 09:08
이번엔 Exoplayer에서 플레이리스트를 설정하는 법에 대해 알아보자 플레이리스트 설정 전에 일단 영상 하나를 재생하는 프로세스부터 알고 해야 될 것 같다. 영상 재생은 아래와 같은 단계를 거친다. // playerView View 맵핑 playerView = findViewById(R.id.playerView); // 영상 Uri Uri uri = Uri.parse("/storage/emulated/0/test.mp4"); DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "PlayerSample")); MediaSource mediaSource = new Progr..
-
Android Exoplayer UI 커스터마이징안드로이드 2020. 3. 16. 16:04
구글에서 오픈소스로 제공하는 Exoplayer 라는 미디어 플레이어가 있다. 이번에 내 마음대로 플레이어를 커스터마이징 하며 Exoplayer에 대해 알아가 보도록 하겠다. Exoplayer를 사용하는 이유는 여러가지겠지만, 가장 큰 이유는 쉽게 커스터마이징이 가능하기 때문이라고 생각한다. 시중에 있는 여러 다른 플레이어들은 색이나 재생 버튼 등을 마음대로 하기 쉽지 않지만, 이 Exoplayer는 개발자나 기획자 마음대로 바꿀 수 있어 많이 사용하는 것 같다. 먼저 Exoplayer를 프로젝트에 추가하려면 아래의 2줄을 gradle에 추가하면 된다. implementation 'com.google.android.exoplayer:exoplayer-core:2.11.3' implementation 'co..
-
마스크 구매 알림이 개발기 - 3안드로이드 2020. 3. 13. 13:29
UI 작업까지 완성되었다. 그래도 뭔가 2프로 부족한 느낌.. 생각해보면 어떻게 사용자가 매번 들어와 새로고침 버튼을 눌러서 마스크 재고가 있는지 확인할까? 그래서 백그라운드 서비스에서 주기적으로 재고 확인을 하는 기능도 추가하기로 했다. 서비스 만드는건 크게 어렵지 않았다. 안드로이드 매니페스트에 아래와 같이 서비스 클래스를 정의해주고, 해당 클래스에서 Service 클래스를 extend 해주면 그 클래스는 서비스로 등록이 된다. 다른 액티비티들처럼 onCreate나 onBind 등의 이벤트 처리를 해줄 수도 있다. 서비스 내부에서 타이머를 이용해 주기적으로 실행할 작업을 처리한다. Timer timer = new Timer(); TimerTask TT = new TimerTask() { @Overri..
-
마스크 구매 알림이 개발기 - 2안드로이드 2020. 3. 11. 11:11
UI 개발도 어느정도 된 것 같았다. 그런데 보자.. 파싱 하는 중엔 아무 UI 변경이 없으니 사용자 입장에선 이게 지금 정보를 가져오고 있는건지 오다 뺏겼는지 알 수가 없다. 가운데 버튼이 돌아가게 만들고 싶었다. 자 우리 refresh 버튼을 어떻게 돌려볼까. android animation 키워드로 검색해 보았다. 오호 뭐가 많이 나온다. 잘 읽어보니 어렵지 않아 보여서 바로 시도해보기로 했다. 1. res 디렉터리 아래에 anim 이라는 디렉터리 생성 2. anim 디렉터리 내부에 loading.xml 생성 3. 애니메이션을 로드할 액티비티에서 로드 및 실행 ///// 애니메이션 로드 Animation animation; animation = AnimationUtils.loadAnimation(c..
-
마스크 구매 알림이 개발기 - 1안드로이드 2020. 3. 11. 10:48
요즘 좀 시간이 남아돌아 온라인 마스크 구매 알림이를 개발해보기로 마음먹었다. 오프라인은 있으니 온라인으로 타겟을 잡았다. 일단 마스크를 어디서 주로 판매하는지 알아보니 네이버 스마트 스토어에서 많이 판매하고 있었다. 오호.. 구매하기 버튼이 활성화 되있는지만 주기적으로 검사해주면 될 것 같았다. 여기까지 내가 해야 할 일을 정리하자면 아래와 같았다. - 구매하기 버튼 활성화 여부 검사 방법 - 안드로이드 웹 파싱 소스코드 작성 - 안드로이드 웹 파싱 소스코드 작성 - 안드로이드 웹 파싱 소스코드 작성 - ... 사실 안드로이드에서 파싱만 할 수 있다면 다 끝날 것 같았다. 하지만 인간의 욕심은 끝이 없으니.. 개발해갈수록 더 많은 부기능을 요구하게 됐다. 어쨌든, 일단 구매하기 버튼 활성화 여부를 어떻..