전체 글

Android 및 취미 활동을 공유하는 블로그입니다!!
Android/Common

[Android] 바인딩 서비스로 음악 재생

이 포스팅은 Music Player 재생의 간단한 로직을 FLO 앱 챌린지에 맞춰 개발한 내용에 대해 제 생각을 정리한 글입니다. 부족한 부분이 있으면 댓글로 알려주시면 감사하겠습니다. 멜론 어플을 사용한 유저라면 다른 어플을 사용 중에도 음악이 재생되는 것을 알 수 있을 것이다. 이는 음악이 Service에서 무한히 재생이 되고 있다는 뜻. 보통의 Service는 어떠한 값도 반환하지 않고 서비스를 종료하는 요청 외에 외부 서비스 내 함수에 접근할 수 없다. 그런데 음악이 재생되고 있는 도중 멜론 앱을 다시 키면 현재 재생되고 있는 곡의 정보를 바로 보여준다. 왜? 답은 Bound Services 이다. Service와 Activity의 관계과 서버와 클라이언트 관계가 된 것처럼 Activity는 Se..

Android/Common

[Android] DataBinding 정리

본 포스팅은 꾸준히 수정됩니다~ findViewById(R.id.sample_text).apply { text = viewModel.userName } //또는 sample_text.text = viewModel.userName 전체 프로젝트의 코드 중 UI의 데이터를 변경해주는 코드의 양이 적지 않다. DataBinding을 사용하면 불필요한 UI 변경 코드를 줄이면서 데이터를 변경할수 있고 메모리 누수 방지와 NPE 방지 등 좋은 점들이 많다. 예를 들어, 부모 레이아웃안에서 TextView를 찾아 viewModel의 userName 값을 대입해주는 코드도 DataBinding을 사용하면 xml에서 똑같은 기능을 구현할 수있다. 변경 후 .. activity_main.xml DataBinding 추가..

Android/Common

[Android] 로또 정보 크롤링해보기 by Kotlin

Jsoup Jsoup이란 Html을 가져오고 파싱을 도와주는 자바 라이브러리이다. 자바와 완벽히 호환이 되는 Kotlin으로 Jsoup을 사용해보자 implementation 'org.jsoup:jsoup:1.11.3' 파싱할 정보 이번에 파싱할 정보는 등수 별 당첨 인원이다. 당첨 번호의 목록은 api로 제공되지만 순위 별 당첨번호는 제공하지 않기 때문이다. 파싱할 Html 형식을 보면 가져와야할 데이터들은 - - 계층구조에 존재한다. 위와 같은 예로 A>B>C 계층 구조의 태그를 파싱할 때는 공백으로 구분한다. regex table tbody tr code val url = "https://dhlottery.co.kr/gameResult.do?method=byWin" val doc = Jsoup.co..

Android/Common

[Android] Firebase ML Kit - Translate에 대한 소개

Firbase ML Kit - Translate = 기기별 번역 API [공식 문서] https://firebase.google.com/docs/ml-kit/translation 기기별 번역 API란 인터넷 필요없이 기기에서 실행이 되는 API인것 같다. 대신 번역 모듈을 (언어당 30MB) 다운받아야 하는 제한사항이 있고 여러나라 언어를 번역을 하는 경우 다운 받아야 하는 모듈의 용량을 클라이언트 기기가 다 짊어지게 되어있다. 그래서 인지 Firbase에서도 불필요한 모듈은 삭제하는 것이 좋다고 명시되어 있다. 총 59개의 언어를 지원하고 기기별 번역 API라서 번역하고자 하는 Text를 서버에 보내면서 번역 Text를 받아오는 다른 플랫폼의 번역 API와는 다르게 빠른 결과를 받아오는 현상을 기대할 ..

Android/Common

[Android]SharedPreferences by Kotlin

SharedPreferences Sqlite 처럼 대규모 혹은 여러개의 데이터를 저장할때가 아닌, 하나의 정보 들을 작게 저장하고 싶을 때 사용하는 클래스입니다. import android.content.Context import android.content.SharedPreferences class SharedPreferences(context: Context) { val PREFS_FILENAME = "appName.prefs" val SOUND = "Sound" val VIBRATION = "Vibration" val prefs: SharedPreferences = context.getSharedPreferences(PREFS_FILENAME, 0) var sound: Boolean get () =..

Android/Common

[Android] 음성 인식 기능 추가하는 방법 정리

1. 'Okay. Google' 기능으로 앱 실행시키기 이 기능은 별다른 추가 없이 실행시키고자 하는 앱의 이름을 넣어서 부르면 된다. ex) 만약 앱 이름이 '점냥'이라면 "Okay Google 점냥 시작" 2. SpeechRecognizer 의 단순 인식 이 기능은 기기 내부 음성 인식 API를 이용하여 음성을 읽어 오는 클래스이다. 때문에 특정 기기에 음성 인식 API가 없다면 사용할 수 없다. 퍼미션 추가 * 안드로이드 마시멜로 이상부터 권한 허가를 요청하는 부분이 필요하다. RecognitionListener 생성 음성인식 API 호출시 발생하는 콜백 메소드 정의 RecognitionListener listener = new RecognitionListener() { @Override publi..

Android/Common

[Android] AAC - View Binding

들어가기 전 Kotlin 1.4.20 Release에서 변경점이 생겼습니다. kotlin extensions plugin이 deprecated 된 점입니다. kotlin extensions plugin에는 synthetic views라는 뷰에 대해 접근하는 코드를 생략해주던 기능이 포함 되어 있었습니다. //Activity or Fragment name.text = "test" 그런데 새로운 버전에서는 dprecated 되었으니 계속 해당 기능을 이용할 수는 없습니다. 다른 대안이 있을까요? ViewBinding란? Android AAC 중 하나로 view의 접근하는 코드를 조금 더 쉽게 작성할 수 있게 도와주는 기능입니다. ex) findViewByID 대신 사용 할 수 있다. Gradle 설정 etc..

Android/Common

[Android] 면접에서 헷갈릴수 있는 Activity Lifecycle

위 Activity의 Lifecycle 그림은 대부분 알고 있으실 건데요. 하지만 두 Activity 간의 전환 사이에서 발생하는 Lifecycle 순서는 대부분 모르실겁니다. (어떤 면접관분께서는 실제 면접에서 질문했을 때 지금까지 맞춘 사람을 2명 보았다고 하네요.) 한번 맞춰보실까요?? Q1. 현재 A 엑티비티가 포그라운드 상태입니다. 이때 B 액티비티로 전환될 때, 발생하는 LifeCycle 콜백 함수들을 순서대로 나열해보세요. A:onPause() A:onStop() B:onCreate() B:onStart() B:onResume() 위 순서로 푸셨다면 아쉽지만 정답자에 들어가지 못하셨습니다 ㅠ 정답 A:onPause() B:onCreate() B:onStart() B:onResume() A:o..

Android/Common

[Android]Keybard Show/Hide 감지하기

activity root View에 대해 리스너를 겁니다. rootView.viewTreeObserver.addOnGlobalLayoutListener { val rec = Rect() rootView.getWindowVisibleDisplayFrame(rec) //finding screen height val screenHeight = rootView.rootView.height //finding keyboard height val keypadHeight = screenHeight - rec.bottom keymode = if (keypadHeight > screenHeight * 0.15) { Toast.makeText(this@MemoActivity, "VISIBLE KEYBOARD", Toast...

Language/kotlin

[Kotlin] - 기본문법 2

DTOs(Data Transfer Object)(POJOs/POCOs) 생성하기 우선, kotlin을 사용하면 get set 메소드를 만들어줄 필요가 없습니다. kotlin을 컴파일하면 java에서 자동으로 get set 메소드를 만들어 줍니다. val var에 따라 get set 유무가 달라지며 val은 read-only로 get 함수만 만들어집니다. java에서 Data 접근을 사용하는 방법은 2가지입니다. public class Sample{ String name; String email; public Sample(String name,String email) { this.name = name; this.email = email; } } public 접근 지정자를 사용하여 메소드 없이 변수에 직접 ..

점냥
점냥's Log