• [Android] 안드로이드 기기 루팅 확인 방법, 에뮬레이터 루팅 여부

    안드로이드 디바이스 루팅 여부 확인하기 종종 안드로이드 폰의 루팅 여부를 체크해야 하는 상황이 있다. 다음과 같은 함수를 사용하면 루팅된 경우 true 값을 돌려받는다. fun isDeviceRooted(): Boolean { val buildTags = android.os.Build.TAGS if (buildTags != null && buildTags.contains("test-keys")) { return true } try { val file = File("/system/app/Superuser.apk") if (file.exists()) {...


  • [Android] Jetpack Compose Focus 처리

    일반적으로 앱의 입력창에 무언가 타이핑 한 후에 키보드가 아닌 곳을 터치하여 키보드를 숨기는 UX가 보편화 되어있다. 물론 안드로이드 유저의 특권인 Back 키나 Back 제스처를 사용해도 되지만, 누구나 실수로 백키를 연타하여 작성 중이던 데이터를 날려버린 경험이 있을 것이다. 우리 “친절한” 안드로이드 개발자들은 키보드 밖을 터치했을 때 키보드가 닫히도록 배려를 해 주자....


  • [Android] RxJava 에러 핸들링 및 디버깅

    RxJava에서 에러가 발생한 상황이나 디버깅이 필요한 때 사용하는 연산자에 대해 알아보자. 오류를 다루는 연산자 RxJava에서는 예외 사항이 일어나면 Emitter.onError()를 호출하여 오류 이벤트를 통제한다. Observable.just("1", "2", "a", "3") .map(i -> Integer.parseInt(i)) .subscribe(System.out::println); 1 2 java.lang.NumberFormatException: (대충 "a"를 Integer로 못 바꿨다는 내용) “a”는 정수로 파싱이 불가능하므로 java에서 NumberFormatException이 발생한다. 정확히는, 고맙게도 RxJava에서...


  • [Android] RxJava Observable 필터, 결합 연산자

    RxJava 1 포스트 [Android] RxJava 시작하기 RxJava 2 포스트 [Android] RxJava Observable 옵저버블 RxJava 3 포스트 [Android] RxJava Cold Observable, Hot Observable RxJava 4 포스트 [Android] RxJava Disposable RxJava 5 포스트 [Android] RxJava Observable 생성, 변형 연산자 이번 포스트에는 Observable을 필터링, 결합하는 연산자에 대해 정리했다. Observable을 필터링하는 연산자 Observable로부터 발행되는...


  • [Android] RxJava Observable 생성, 변형 연산자

    RxJava 1 포스트 [Android] RxJava 시작하기 RxJava 2 포스트 [Android] RxJava Observable 옵저버블 RxJava 3 포스트 [Android] RxJava Cold Observable, Hot Observable RxJava 4 포스트 [Android] RxJava Disposable 이번 RxJava 5 포스트에서는 여러 연산자 중에서도 Observable을 생성, 변형하는 연산자에 대해 알아보려고 한다. 영어 독해나 작문을 하기 위해서는 먼저 단어를 알아야...