[안드로이드] PopupMenu 이미지 클릭시 작은 팝업 메뉴.


    구글 플레이에 들어가보면 리스트 중에 점이 3개 있으면서 클릭하면 작은 팝업메뉴가 뜨는것을 볼 수 있다. 처음에는 어떻게 구현하나 막연하게 생각 했는데 알고보니 어렵지 않게 구현이 가능하다. PopupMenu라는 위젯 클래스가 지원되어 편하게 사용 할 수 있다. 구글에 많은 예제가 있으니 몇 가지 올려 놓도록 하겠다. 


1. 참고 및 참고 할 만한 사이트 

  - http://stackoverflow.com/questions/22294691/android-list-view-layout-similar-to-google-play

  - http://stackoverflow.com/questions/18588781/android-popup-menu-when-list-item-view-pressed

  - http://stackoverflow.com/questions/27782846/popup-menu-in-custom-listview

  - 한가지 더 첨언 하자면 액션바셜록에서 버전이 낮다고 안되시는 분은 셜록 사이트 가셔서 PopupMenu.java를 추가해주시면 됩니다.

[안드로이드] QRCODE Zxing 라이브러리 사용


    많은 앱들이 이 라이브러리를 사용하여 QRCODE 관련 프로젝트를 진행 하는거 같다. 조만간 필요하게 될 거 같아 미리 포스팅을 해본다. 먼저 중요한 것은 세로모드의 QRCODE 스캔의 인식률이 좋아야 한다. 관련해서는 네이버와 구글을 참고하여 완성하였다. 먼저 최신 버전은 3.1.0 버전인것 같지만 2.3버전으로 하게 되었다. 이유는 3.1.0 버전은 세로모드로의 변환이 잘 되지 않는다는 글을 보았기 때문이다. 2.3 버전으로도 충분하기에... 윗 버전은 어떤 점이 더 추가 되었고 개선 되었는지 모르겠지만.. 나중에 필요하게 되면 그 때 버전업을 해도 상관없다고 생각이 된다.


1. 필요한 자료 및 다운로드

  - core-2.3.0.jar 다운로드 하기 : http://repo1.maven.org/maven2/com/google/zxing/core/2.3.0/

  - ZXing-2.3.0.zip 소스 다운로드 하기 : https://code.google.com/p/zxing/downloads/list

  - Zxing 프로젝트 홈 : ttps://github.com/zxing/zxing


2. 이클립스에 인포트 하기

  - 다운받은 ZXing-2.3.0.zip의 압축을 풀고 이클립스에서 Import를 하면 2개의 프로젝트가 보일 것이다. Test는 빼고 CaptureActivity만 Import 한다.

  - 그럼 인포트 되면서 소스들이 에러를 뿜을 것이다. Import한 프로젝트내에 libs 폴더를 만들어주고 android-support-v4.jar과 core-2.3.0.jar를 이클립스 내에서 카피를 해주면 바로 라이브러리를 참조 하면서 빨간 에러들이 사라지고 빌드가 가능 해 질것이다.

  - 참고 01 : http://blog.naver.com/chae1789/220181162927


3. 세로모드 전환하기

  - 이건 직접 한것이 아니라 구글과 네이버를 참고 했다 아래 블로그들을 참고 하기 바란다.

  - http://stackoverflow.com/questions/16252791/zxing-camera-in-portrait-mode-on-android

  - http://blog.naver.com/airwindtree/220255139786

  - http://kjw1801.tistory.com/search/%EC%84%B8%EB%A1%9C%EB%AA%A8%EB%93%9C


4. 기타 최근 버전 관련

  - http://nashorn.tistory.com/346

[안드로이드] 프로가드 앱 난독화.


   프로가드를 이용한 앱 난독화의 기본 설정은 어렵지 않다. 단 몇가지 주의 사항은 조심해야 한다. JavascriptInterface를 사용 하였을 경우와 외부 라이브러리를 사용 했을 경우 문제가 발생 하므로 이러한 부분은 관련된 자료를 찾아서 난독화가 진행되지 않도록 하는 작업을 해주어야 한다. 구글에 가서 프로가드를 검색해보면 많은 예제가 나오고 스택오버플로우도 많으니 조금만 찾아보면 쉽게 적용 할 수 있을 것이다. 난독화 한다고 리버싱을 방지 할 수 없지만 어느정도 짜증(?) 나게 할 수는 있다는거에 의미를 찾아보자 ^^


1. 난독화 관련 블로그

  - http://stackoverflow.com/questions/13641540/javascriptinterface-not-working-with-proguard-on-android-4-2

  - http://blog.naver.com/hantacrew/220039584560


[안드로이드] 와이파이와 핫스팟을 껏다 켜보자.


   간혹 이런 기능들이 필요 할 때가 있다. 어떤일을 수행 할 때 와이파이를 사용 하지 않도록 해달라든지... 또는 핫스팟을 이용한 프로그램 제작을 요청 할 경우가 있다. 이미 처리를 하였지만 나중을 위해 포스팅 해둔다.


1. 핫스팟 On/Off 예제링크

  - http://omtlab.com/android-enable-disable-wifi-programmatically/


2. 와이파이 On/Off 예제 링크

  - http://omtlab.com/android-enable-disable-hotspot-programmatically/


3. 와이파이 특정 SSID에 자동 접속하기

  - http://blog.daum.net/_blog/ArticleCateList.do?blogid=0QsJw&CATEGORYID=7

  - http://www.programering.com/q/MDMzETNwATQ.html

  - http://stackoverflow.com/questions/15225232/programmatically-connect-to-an-android-device-in-portable-hotspot

  - http://stackoverflow.com/questions/6517314/android-wifi-connection-programmatically

  - http://stackoverflow.com/questions/8818290/how-to-connect-to-a-specific-wifi-network-in-android-programmatically

[안드로이드] 액션바 백그라운드 이미지로 설정하기


액션바에 백그라운드 부분을 이미지 처리 해보자.
final ActionBar actionBar = getActionBar();
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.raw.actionbar_background));
actionBar.setBackgroundDrawable(background);


[안드로이드] TextView의 각 글자크기나 색을 다르게 해보자.


   본인도 이런 소소한 것들을 몰라서 레이아웃에 여러개의 TextView를 이용해서 표현 했었다. 그런데! 이런 기능들이 있을 줄이야 역시 배우려면 제대로 배우는게 중요한거 같다. ㅠㅠ 중요한 것은 SpannableString sText = new SpannableString(textString) 와 같이 SpannableString를 사용 하는 것이다.


1. 예제 링크

  - http://stackoverflow.com/questions/19639272/set-text-of-a-textview-with-different-sizes

  - http://stackoverflow.com/questions/19238780/set-a-string-array-into-bold-in-android


이 2개의 예제만 봐도 아마 아~~~~~ 하실 것이다!!

[안드로이드] ListView의 ROW의 하위 뷰 읽어 오기.


   ListView가 10줄이 있다고 가정하고. ListView안의 특정 TextVeiw의 총 합을 구하려면 어떻게 해야 할까?? ListView의 GetCount()를 사용하면 전체 row의 개수를 알 수 있다. getChildCount()를 사용하면 현재 보이는 화면의 +2 된 로우만을 구해 올 수 있다. 쉽게 생각 할 수 있지만 조심해야 한다.  


스택오버플로우에 좋은 예제가 있어 링크한다. 아래 메서드를 만들고 GetCount() 만큼 for문을 돌리면 되지 않을까 싶다. 

http://stackoverflow.com/questions/24811536/android-listview-get-item-view-by-position


public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

if (pos < firstListItemPosition || pos > lastListItemPosition ) {
    return listView.getAdapter().getView(pos, null, listView);
} else {
    final int childIndex = pos - firstListItemPosition;
    return listView.getChildAt(childIndex);
}
}


[안드로이드] UDP BROADCAST에 대해 알아보자.


    이번 프로젝트를 하면서 필요했던 UDP BROADCAST에 대해서 간단히 남겨 놓는다. TCP는 서로의 위치를 알고 통신을 하지만 UDP BROADCAST의 경우는 내가 속해 있는 네트워크단에 무작위 메세지를 보내서 어떤 값이 돌아오는지 또는 꾸준히 청취 할 수도 있다. 예를들자면 네트워크단에 9977포트로 "프린터 있니??" 라는 신호를 보냈을 경우 9977포트에서 이 소리를 듣고 있던 프린터가 "어 나야" 해서 보내 올 수 있다는 거다. 더 많은 이해를 하려면 역시 네이버나 구글을 검색해보는게 좋겠다.


1. 여러가지 BROADCAST 모아놓은 블로그

2. 브로드캐스트 예제 이것만 보고 만들었다 아주 좋은 예제다.

3. 브로드캐스트 못 받을 경우 퍼미션 설정 해주자.

[안드로이드] 쓰레드 Runnable, Thread에 대해 알아보자.


    쓰레드 구현 방법에는 Runnable 인터페이스와 Thread 클래스 사용하는 방법이 있다. 또 쓰레드의 시작을 알리는 run()과 start()의 차이점을 알아두는게 좋을 것 같다. 아래 그 예시 사이트를 기재해 놓도록 하겠다.


1. 예제 1

2. 예제 2

[안드로이드] 안드로이드 개발시 FTP 연결 관련


    일단 안드로이드에서 FTP 개발관련 검색해보면 많은 자료가 나오므로 큰 개발 방향에 문제는 없을 거라 생각 된다. 하지만 가장 중요한것은 한글 인코딩이라는 것이다. 서버의 인코딩 형태가 "ISO-8859-1" 라면 기본 연결을 했을 경우 한글이 깨져서 보일 것이다. 이런 경우는 setControlEncoding("euc-kr"); 설정으로 한글을 제대로 볼 수있다. 문제는 서버쪽으로 output 할 경우 인데  new String(folderName.getBytes("EUC-KR"), "ISO-8859-1"); 와 같이 분명하게 "ISO-8859-1"로 인코딩을 해서 보내줘야 알아 먹는다. 이것 때문에 몇 시간을 고생 했으나 해결해서 올려 놓는다. 물론 사용 하는 서버가 XX같아서 일수도 있으나 혹시나 하는 분들은 테스트 해보길 바란다.


1. 아파치 Commons 사용

2. FTP 예제 1

3. FTP 예제 2

[안드로이드] 폴더리스트 가져오기, 모든 폴더에서 파일 가져오기


  이번 작업에 필요했던 기능은 

첫째는 이미지가 있는 폴더들을 리스트를 보여주고 가장 최근의 이미지를 썸네일을 보여준다.

둘째는 위의 풀더 리스트를 클릭 했을 경우 그 폴더 안에 있는 이미지 들을 보여주도록 한다.

전체적인 틀은 이정도이고 고려해봐야 할 것은 많은 이미지를 보여 줄 경우 메모리 관리에 신경을 써야 한다.

아래 링크들은 위의 프로그램을 만드는데 도움을 받았던 사이트들이 필요한 분들은 참고 하길 바랍니다.


1. 폴더리스트 가져오기 

  - 링크 1

  - 링크 2

  - 링크 3

  - 링크 4

  - 링크 5MediaStore를 통한 썸네일을 가져올 경우 메모리 해제가 되지 않는 문제가 있는듯 하니 참고 바랍니다. 전 파일 Path를 통해 직접 리사이즈해서 보여줬습니다.

  - 링크 6

  - 링크 7 : MediaStore를 이용 할 경우 기기의 편차도 고려 해봐야 할 것 같다.

  - 링크 8MediaStore의 각 값들 정리

  - 링크 9 : 썸네일 관련

  - 링크 10 : 썸네일 관련

 

2. 비트맵 리사이즈 옵션 관련

  - 링크 1


3. 이미지 관련 Example

  - 링크 1

[안드로이드] 알림 팝업 창 만들기.


   알림 팝업 창을 만드는 방법은 여러가지가 있다. 액티비티를 이용한 방법, AlertDialog를 이용하는 방법. AlertDialog를 이용하는 방법도 여러가지가 있을 수 있다.   

  

1. 액티비티를 이용해보자.

  - 링크 1


2. AlertDialog를 이용해보자.

  - 링크 1

  - inflater를 이해하자.


3. 도움 될만한 Dialog 속성들.

  - 링크 1


[안드로이드] DatePickerDialog 사용시 주의 및 체크 사항.


    이 DatePicker의 작동 방식이 특정 안드로이드 버전에서 최근버전과 약간 다른 방식으로 작동을 하는 부분을 조심해야 한다. 일반적으로 DatePickerDialog를 띄우고 설정을 누르면 onDataSet 메소드가 호출되고 끝나야 정상이라 생각 할 것이다. 특정 안드로이드 버전에서 여러번 실행되는 오류 또는 취소해도 onDataSet이 실행되는 문제점이 보고 되고 있다. 이를 방지 하기 위해 그냥 DatePickerDialog를 쓸것이 아니라 취소 버튼과 캔슬에 대한 리스너를 등록 해주고 boolean이나 int 변수로 체크를 해주어야 하위 버전들에서 문제가 없다. 


1. 처리방법 사이트 링크

  - 여기 해결 방법의 답이 있는 곳을 링크한다. 01

  - 여기 해결 방법의 답이 있는 곳을 링크한다. 02


[안드로이드] 다른 App에 데이터전달, Share(공유) 기능을 사용을 해보자.


   공유(Share) 기능이란 내 앱에서 파일이나 이미지, 텍스트 등을 다른 앱으로 전달 할 수 있는 기능이라 생각하면 되겠다. 예를들어 내 앱에서 백업한 DB파일을 간단하게 GMAIL을 이용해서 첨부해서 메일을 보낼 수도 있다. 그 밖에 구글 드라이브나 다른 클라우드 서비스를 이용 할 수도 있을 것이다.


1. 처리방법 사이트 링크

  - Intent를 사용한 첨부파일 이메일 보내기

  - 드로이드 공유기능 쓰기

  - 컨텐츠를 다른 앱들에게 보내기

  - 액션바를 통한 공유 예제

  - 공유(Share) 기능 추가하기

  - How to customize share intent in Android?





[안드로이드] SQLITE DB 백업 및 복원 방법


   SQLITE DB는 DB자체가 파일 형식으로 존재하므로 파일을 복사하는 것으로 간단히 백업을 받을 수 있다. 


1. 참고사항

  - DB가 존재하는 위치 : /data/data/<package name>/databases/<database name> 


2. 처리방법 사이트 링크

  - StackOverFlow 01

  - StackOverFlow 02

  - StackOverFlow 03