안드로이드 200

안드로이드 프래그먼트 탭 생성하기 -viewpager

호랑이가 담배 피우지 않던 시절에는 안드로이드는 탭 호스트라는 것을 사용하여 멀티 화면을 정의해서 썼다고 한다. 그럼 호랑이가 골초가 되어버린 요즘에는 어떻게 탭 효과를 낼까? 방법은 간단한데, 요즘 방식으로 되어있는 글이 없어서 남겨 보도록 한다. 1. 안드로이드 스튜디오에서 새 프로젝트 만들기를 한 뒤 Fragment Tab을 선택한다. 2. 일단 메인 액티비티 하나와 레이아웃이 생성 된다. 3. 메인 액티비티는 탭 안에 담을 프래그먼트를 조정할 수 있고, 레이아웃은 타이틀 및 탭 제목등의 효과를 담당한다. 4. 메인 액티비티는 탭을 조정 하기 때문에 탭에 담길 프래그먼트(Fragment)를 넣어주는 작업을 해야 한다.- File에서 New를 한 뒤 Fragment를 하나 생성한다.- Layout도 ..

안드로이드 error activity class does not exist

안드로이드에서 액티비티를 매니패스트에 추가를 해줬지만 아래와 같은 에러가 나는 경우가 있다. error activity class does not exist 액티비티는 분명히 존재 한다. 파일도 존재 한다. 패키지명도 올바르다. 도데체 뭐가 문제인가? 이럴때 시도 해볼 수 있는 방법 1. Clean Android Studio Project2. 빌드 디렉토리 지우기.3. 안드로이드 스튜디오 재 시작4. 리빌드/실행 안드로이드 스튜디오가 꼬이는 경우 재시작만 해도 되는 경우가 있다. 하지만, 이래도 안된다면? 철자를 잘 살펴 보라! 분명 오타가 있을 지다. 만약 액티비티가 com.comostudio.a.b.activty 인데 android:name="b.activity"라고 적으면? 문제가 없어 보인다? 점..

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

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

[아이폰6S CPU] 삼성이냐 TSMC 이냐에 따라 배터리 성능이 다르다?

애플 아이폰 6s의 CPU 제조사가 누구냐에 따라 배터리 성능이 다를 수 있다는 테스트 결과가 나왔다고 합니다. 엔가젯에 따르면 어떤 테스트에서는 최대 2시간 가량의 성능이 차이가 났는데요... 이에 대해 애플에 문의한 결과 애플은 '둘 다 문제 없다. 당신들이 테스트한 것은 사람들이 일반적으로 쓰지 않는 방법이다. 그렇게 테스트 한 것은 잘 못 되었다. 즉, 기본적인 테스트를 해보면 2~3%의 성능차이가 난다'라고 답변을 보냈다고 하네요. 어찌 되었간에 차이는 있을수 있다는 겁니다. 테스트가 잘 되었든지 안 되었든지에 상관없이 2~3%의 차이가 있으니 사는 지역에서의 삼성과 대만의 TSMC에서 만든 A9프로세스의 차이를 인식하고 클래임을 걸라고 하는 군요. 걸지 않으면 소비자만 피해를 볼거라고 말이죠...

Preference item 클릭 효과 만들기

안드로이드 리스트의 경우에는 간단히 list.setSelector를 해주면 아이템 클릭 효과를 줄 수 있다. 뿐만 아니라 Preference에서도 비슷하게 사용 할 수 있는데, getListView를 한 뒤 리스트처럼 사용하면 아이템 클릭시 효과를 얻을 수 있다. 하지만 언제나 어려운 문제는 발생하는 법. 만약 Preference를 오버라이드(Override)한 다면 어떻게 처리 해야 할까? 오버라이드를 했으니 메인 프리퍼런스 액티비티가 어찌 손을 쓸 수도 없고... 오버라이드한 프리퍼런스에서 getListView를 하기도 그렇고... 그럼 도데체 이 리스트 아이템을 어떻게 가져 올 거냐? 여기 저기 검색을 해봐도 오버라이드 되지 않은 프리퍼런스의 아이템에 대한 얘기 밖에 없다. 그럼... 어차피 새로 ..

AsyncTask를 전역으로 쓰면?

안드로이드 AsyncTask를 전역으로 쓴다면? 즉, 재활용 하겠다는 의미인데 가능 할까? 불가능하다! 만약 한 번 쓴 비동기 태스크를 재 활용 하려고 하면 아래문구를 보게 될 것이다. java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once) 즉, 변수 이름은 재활용이 가능 하지만 다시 쓰려면 새로 할당을 받으라는 것이다. 당연한 것 아니겠나? 얼음 얼리는 통을 사서 물을 채우고 얼음을 얼려서 먹었는데, 다음 번에 얼음을 먹으려면 당연히 물을 다시 부어서 넣고 기다려야 먹을 수 있지 않겠는가? 그 당시 얼음 통과 얼음은 그 당시의 내 위장 속..

안드로이드 액티비티 싱글 탑의 비밀

안드로이드 싱글 탑? 한글로 적으니 뭔가 있어 보이기는 하는데.... 싱글탑의 비밀 중 한 개만 얘기 하고 가도록 하겠다.(사실 초보라 아는 것만 얘기 하지만 있어 보이고 싶나보다) 만약 액티비티를 실행 할 때 FLAG_ACTIVITY_SINGLE_TOP과 같은 플래그를 사용 하지 않는다면... 예를 들어 NO_HISTORY와 같은 플래그를 썼다면 돌아 올길이 막막해지는 경우가 있다. 문제1. A액티티비에서 startActivity를 FLAG_ACTIVITY_NO_HISTORY로 실행한 해서 B 액티비티로 갔다.2. B액티비티에서 startAcitivityForResult를 실행 하여 다른 액티비티 C로 이동 하였다. 3. C액티비티 또는 Preference 에서 볼일이 끝났다. 그럼 C 에서는 볼일을 ..

안드로이드 preference persisit 의 비밀 한가지

preference에서 getPersistedString 으로 저장된 값을 가져오고 있었는데 이 값을 String에서 Int로 바꾸었다. 그리고 이젠 getPersistedInt 요렇게 값을 가져 오도록 한 뒤 실행을 했더니... 저승사자가 또 와버렸다. 안드로이드 초보인 코모에겐 아직도 까만 화면의 팝업이 너무 두렵다. 그리고 희한 하게도 이상한 에러로 죽으니 참으로 입이 타들어 간다. Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 분명 int로 바꾸면서 int 변수에 넣어 줬는데 도데체 이게 무슨 귀신이 신나서? 까까불어 먹고 있는 소리인가... int a - getPersiste..

안드로이드 Edittext 엔터 인식 및 event null 처리

안드로이드 에디터 텍스트(edit text)에서 엔터키나 Done키를 받기 위해서는 아래와 같이 리스너(setOnEditorActionListener) 를 등록 하면 된다. @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ( actionId == EditorInfo.IME_ACTION_DONE || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 그런데 여기서 문제가 있다. event가 null 이 들어 오는 것이다. 죽음이란 거다. 이럴 경우 null 처리(event != null &&)를 해주면 그만이겠거니 하고 생각 하겠지만... 그렇다면 엔터에 대한 반응 ..