[안드로이드 공부]/안드로이드 공부 32

[안드로이드] Low Battery 테스트 하기

앱을 만들다 보면 Low Battery에 대한 처리가 필요할 때가 있다. 이를 테스트 하려고 배터리를 다 쓸 때까지 기다려서는 테스트가 힘들어 진다. 이 때 유용하게 사용할 수 있는 adb 명령어 입니다. adb shell am broadcast -a android.intent.action.BATTERY_LOW 이렇게 명령어를 치면 등록된 브로드캐스트의 onReceive로 action이 들어오게 된다.로우 배터리 일때 하고 싶은 동작을 해 주면 될 것이다. android.intent.action.BATTERY_LOW 리시버 등록은 다음과 같이 하면 된다. ... intentFilter.addAction("android.intent.action.BATTERY_LOW"); intentFilter.addAct..

[안드로이드] EditText setText Exeception

에디트텍스트(EditText)를 사용하다가 아래와 같은 익셉션을 만난다면 무엇에 주의 해야 할까? E/InputEventReceiver: Exception dispatching input event.E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallbackE/MessageQueue-JNI: android.content.res.Resources$NotFoundException: String resource ID #0xE/MessageQueue-JNI: at android.content.res.Resources.getText(Resources.java:244) setText(int resId)는 리소스 아이디를 받는 타입이다. ..

[안드로이드] Listener Return false, true 의미

안드로이드에는 수 많은 리스너(Listener)가 있다. 기다렸다가 처리하라는 의미다. 그런데 return false, return true가 항상 따라 다닌다. 이게 뭐가 중요할까? 1. true- 일 다했으니 해당 이벤트에 대해서는 다음에 쌓인일은 지워. 2. false- 아직 일 다 못했다.. 다음에 쌓여 있는 같은 일 또 보내줘.. 처리 하게... 그렇다.true는 깔끔하게 처리 하고 끝낸다.false는 일 덜 처리 했다... 즉, event 값에 원하는 값이 안 오거나, null이 오거나... 등 만족 스럽지 못했을 경우에 사용 하면 된다.

[안드로이드] setText 업데이트 적용 안되는 현상

UI에서 setText를 적용하기는 참 귀찮다. 이 놈이 현재 UI 스레드에서 돌고 있는지 등에 대한 고려를 해야 하기 때문이다. 즉, 팝업에 갔다 오거나... 여기 저기 갔다와서 적용사항을 변경해야 하는데 이때 setText를 하면 먹히지 않는다. 즉, 그 때와 지금의 주인이 다르기 때문이다. 이럴 때에 사용하라는 방법이 핸들러를 돌려라... 스레드를 돌려라... 등의 추천이 많은데... 그냥 다시 찾아서 넣어주면 된다. LayoutInflater layoutInFlater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rootView = layoutInFlater.inflate(R.layout.fr..

안드로이드 롤리팝 이상에서만 죽는 것

안드로이드가 세상사람들과 친해지기 시작한지 5년 정도 된 것 같다. 그래서 처음 부터 만나왔던 사람들에게도 잘해주려고 안드로이드는 v4, v7등과 같은 라이브러리를 제공하여 최신 API 및 UI를 사용할 수 있게 해주고 있다. 하지만, 이런 라이브러리를 사용할 때는 에러를 쉽게 만난다. 싼게 비지떡? 공짜가 어디있냐? 1. 최신 라이브러리를 이용하여 seekbar, switch 등을 가져와서 레이아웃에도 정확히 만들었고, 코드에서도 ID를 정확히 불러왔다. 2. 그런데 사망하셨다. (롤리팝 이상에서만 죽는다.)java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SwitchCompat...

안드로이드 보안 취약 점 allowBackup - 비밀 정보 쉽게 빼내어 가는 법

기본적으로 android:allowBackup 옵션은 true다. 이 말의 뜻은; 앱이 시스템(OS)의 백업 정책에 참여 하겠다라는 것이다. 즉, 시스템이 백업을 할 때, 이 값이 True로 되어있는 어플리케이션의 Data도 함께 백업 되며 복구 할 때 다시 자동으로 복구 시켜준다. 결국, 폰 리셋을 할 때 어플 백업등을 하면 자동으로 앱의 데이터가 저장된다는 것인데... 여기서 문제가 있다. 만약 사용자의 스마트폰이 자의든 타의든 adb 허용으로 설정이 되어있다면, 누구든지 USB를 연결하여 앱의 데이터를 빼갈 수 있다는 것이다. 사진 zdnet 이것이 무슨 말이냐? 만약 카카오톡이 이 옵션을 true로 해 놓았을 경우.... 누군가가 폰의 설정을 만져서 adb 허용으로 바꾼다면? USB를 꽂아서 카카..

[안드로이드] 홈키 5초룰을 아시나요?

앱을 테스트 하던 중, 이벤트를 받고 startActivity를 했는데, mainActivity가 화면에 2-3초 후에 나타나는 현상이 발생했습니다. 왜 이렇게 느리지 하는 생각이 들어 개선점을 찾아 보기로 했지요. 속도를 개선해야 겠다 화면을 많이 그려서 그런가... 리소스를 잡아먹는 코드가 있나 고민에 빠졌죠.코드를 이것저것 빼도 전혀 빨라지지가 않네요. 그런데 이것저것 테스트를 하는 중에 Back 키로 앱을 나간 후 실행하면 바로 뜨고, Home 키로 나간 후 실행하면 뜨지 않는다는 차이점을 발견했지요. 홈 키는 뭐가 다를까?검색을 해 보니 안드로이드에는 일명 5초 룰 이라는 것이 있네요.홈키로 앱을 숨기면 그 activity는 백그라운드에서 startActivity를 해도 5초 동안 꼼짝하지 않는..

[안드로이드] 볼륨 롱키 인식하기

타이머를 써야 하나 flag를 써야 하나 고민도 해봤는데, 안드로이드에서 volume long key 인식하는 방법입니다. @Override public boolean onKeyLongPress(int keycode, KeyEvent event){ if(keycode == KeyEvent.KEYCODE_VOLUME_UP || keycode == KeyEvent.KEYCODE_VOLUME_DOWN) { Log.d(TAG, "Long press KEYCODE_VOLUME_UP"); return true; } return super.onKeyLongPress(keycode, event); } @Override public boolean onKeyDown(int keycode, KeyEvent event) { ..