본문 바로가기

728x90
반응형

Android

(80)
[안드로이드 Service] MVVM구조에서 BluetoothLE Service 사용하기 BLE와 블루투스의 안드로이드 예제를 포스팅 하였었습니다. [Android/통신] - [안드로이드 Kotlin] BLE(Bluetooth Low Energy) 통신 예제 [Android/통신] - [안드로이드-아두이노] bluetooth classic 자동 페어링&연결 / 데이터 송,수신 글은 메서드 위주로 설명하였습니다. 위 글들 하단의 github 소스 코드를 먼저 보면 코드를 MVVM구조로 구성하면서 BleRepository를 만들어서 Repository에 BLE 메서드를 전부 구현하였었습니다. MVVM 구현 소스 보기 하지만 Service 사용의 필요를 느끼면서, 메서드를 Service로 옮기고, Service를 어디 둘지 고민하게 되었습니다. Service 사용 이유? 만약 Activity와 B..
[안드로이드] 텍스트 추가시 스크롤 자동 내리기 스크롤 뷰 안에 있는 텍스트뷰에 텍스트를 추가하고, 추가된 텍스트뷰가 보이도록 스크롤 뷰가 자동으로 내려가야 합니다. 여러가지 방법이 있지만, 가장 잘 동작하는 코드입니다. PerfectScrollableTextView Class를 만듭니다. import android.content.Context import android.graphics.Rect import android.util.AttributeSet import android.widget.TextView class PerfectScrollableTextView : TextView { constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super( context, attrs, ..
[안드로이드 MVVM] Repository 에서 ViewModel, View(Activity,Fragment)에 Event/Data 전달하기 ― Repository에서의 LiveData ? LiveData를 이용한 데이터 Observing & View Update MVVM 구조에서 Repository에서 ViewModel의 메서드를, ViewModel에서 Activity등의 view를 참조하면 안되었습니다. 위 그림의 구조처럼 View는 ViewModel을 계속 관찰, ViewModel은 Repository의 데이터를 계속 관찰하여 View를 업데이트 해야합니다. ViewModel에서 데이터 변화에 따라 View를 변화시키고 싶을 때, Event를 발생하고 싶을 때 Event Wrapper를 사용해야 한다고 포스팅 하였습니다. [Android/이론] - ViewModel과 View(Activity, Fragment)간의 이벤트 처리― Event Wrapper 사용하기 Event Wrappe..
[안드로이드] layout 데이터 바인딩 string 값 비교 android:visibility="@{viewModel.roadGuideViewStatus.equalsIgnoreCase(@string/view_roadguide_arrive)?View.VISIBLE:View.GONE}"> .equalsIgnoreCase("...") .equals(`...`) 두가지 메서드로 사용할 수 있고, `...`를 통해 string입력할 수 있다.
[안드로이드 Kotlin] Room Database, Repository, ViewModel을 Koin으로 의존성 주입(DI) Koin DI(Dependecy Injection, 의존성 주입)는 구성요소들의 의존관계가 소스 내부가 아닌 외부에서 설정되도록 하는 디자인 패턴입니다. public class PetOwner{ private AnimalType animal; public PetOwner() { this.animal = new Dog(); } } 위와 같은 예제 코드 처럼 PetOwner()클래스는 Dog()클래스에 의존적인 상황이 되겠죠. 따라서 하나의 클래스만 변경하여도 의존한 다른 모듈까지 변경되는 상황이 됩니다. DI 디자인 패턴을 사용하면 객체의 생성과 사용을 분리시켜 재사용이 유연해집니다. Koin은 다른 의존성프레임워크인 Dagger2와 달리 러닝커브가 높지 않습니다. 기존 Repository는 singlet..
[안드로이드] 키보드 숨기기 버튼을 누르면 키보드를 숨길 수있도록 아래 메서드를 버튼 클릭 받는 부분에 추가 해 줍니다. /** * Hiding keyboard after every button press */ private void hideKeyboard() { InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); //Find the currently focused view, so we can grab the correct window token from it. View view = getCurrentFocus(); //If no view currently has focus, create a new one, just..
[안드로이드-아두이노] bluetooth classic 자동 페어링&연결 / 데이터 송,수신 이 예제는, 특정 이름을 가진 블루투스를 검색 후 자동 페어링, 연결 후 데이터 송/수신을 하는 예제입니다. 아두이노 우노와 데이터 송/수신 하였고, HC-06을 사용 하였으며, SPP통신입니다. 이전에 안드로이드와 아두이노 블루투스 코드를 포스팅 했었습니다. (Java) [Android/통신] - [안드로이드] 아두이노와 안드로이드 Bluetooth 통신하기 위의 포스팅과 비교하여 추가된 점과 달라진 점은 아래와 같습니다. 페어링된 기기뿐 아니라 페어링 되지 않은 기기의 페어링 진행 특정 디바이스를 필터하여 페어링&연결 블루투스 connect 상태 체크 안드로이드, 아두이노 송/수신 전부 구현 Kotlin 데이터 바인딩과 라이브데이터를 사용한 MVVM 구조로 짜여진 코드를 리뷰하는 것이므로, 메서드 구..
[안드로이드 Kotlin] 카운트 다운 타이머(CountdownTimer) 간단 사용하기 5초 카운트 다운 후 버튼 실행을 해보겠습니다. private val mCountDown: CountDownTimer = object : CountDownTimer(5250, 500) { override fun onTick(millisUntilFinished: Long) { //update the UI with the new count counterText.set("${(millisUntilFinished.toFloat() / 1000.0f).roundToInt()}초 뒤에 자동으로 시작 됩니다..") } override fun onFinish() { //countdown finish onClickStart() } } 500ms interval 마다 ui를 업데이트하고, 5250ms(5.25s) 부터 카..

728x90
반응형