Development/Android 21

Thread 와 Database 의 Connection 문제.

서비스 개발이 거의 막바지에 다달았습니다. Server 쪽 개발하랴 Client 쪽 개발하랴 눈코뜰새 없이 바빴습니다만 결과물들을 보니 고생한 보람을 느낄 수 있네요. Android Client 의 형태는 탭 view 들로 되어 있으며 전체적인 형태는 카톡을 상상하시면 됩니다. 탭들이 화면 하단에 4개 있으며 해당 탭들마다 다른 view 의 내용들을 출력해주는 방식입니다. server 와 통신을 하면서 local database 에 데이터를 가져오고 보내주면서 그 데이터들을 Thread 로 처리하는 방식인데 client 에서 많은 thread 를 실행하다 보니 개발도중에 자꾸 여러가지 문제점들이 발생했었습니다. 가장 대표적인 문제점이 thread 의 database 사용에 따른 connection 과 l..

Development/Android 2012.02.18

안드로이드 WebChromeClient 에서 Web 브라우저 이벤트 구현하기.

안드로이드의 WebChromeClient 에서 'alert' 이나 '윈도우 닫기' 등의 Web 브라우저 이벤트 구현하기. WebViewClient 가 아닌 WebChromClient 를 상속받는다. .......... WebView mWeb; .......... mWeb.setWebChromeClient(new MyWebChromeClient()); .......... private class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { final JsResult finalRes = result; ne..

Development/Android 2011.09.22

안드로이드 WebView 화면에서 전화걸기 오작동 막기.

안드로이드 WebView 화면에서 전화번호와 비슷한 98217398217 등의 숫자로만 이루어진 컨텐츠가 있을때 터치하게 되면 전화걸기 기능으로 바로 연결되는 오작동 막기. ........ WebView mWeb; ........ mWeb.setWebViewClient(new DongYang()); ........ private class DongYang extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("mailto:") || url.startsWith("tel:")) { return false; } view.loadUrl(url); return true;..

Development/Android 2011.09.22

안드로이드 또는 아이폰에서 서버로 파일을 올릴때 리턴값(스트링)을 받아오기.

안드로이드, 아이폰에서 서버로 httpClient 를 이용해서 그림파일을 보내고 그 결과값을 받아와야 할 일이 생겼다. 스트링으로 받아오려면 프레임웤에 REST 를 올려서 json 으로 받는게 가장 심플하고 좋겠지만 낼모레 테스트하는 마당에 그러기엔 너무 귀찮고.. 해서 약간 꼼수를 썼다. 서버의 컨트롤러 메소드에서 ModelAndView 를 리턴할때 jsp 페이지를 하나 만들어 두고 그 jsp 페이지에 리턴할 내용만 넘겨주면 된다. 아주 심플하다. 대신 jsp 페이지의 내용엔 오로지 리턴받기 원하는 string 만 들어가야 한다. 예를 들면, 안드로이드에서 ByteArrayOutputStream bos = new ByteArrayOutputStream(); signature.compress(Bitmap..

Development/Android 2011.09.20

Error generating final archive: Debug Certificate expired

오랜만에 mac 에서 안드로이드 앱을 개발하려던 도중에 오류가 발생한다. 분명 소스상에는 아무런 오류가 없는데 빨간 딱지가 뜨는데 별다른 오류내용을 출력하지는 않는다. 출력창에 나오는 오류메시지는 딱 한줄. Error generating final archive: Debug Certificate expired.. 어쩌고 저쩌고. 처음 안드로이드 SDK 를 설치하면 생성되는 debug.keystore 의 유효기간이 1년이다. mac 에서 한달만에 이클립스를 띄우니 마침 그기간 사이에 key 유효기간이 expire 되어 버린것이 원인이었다. 해당 파일을 찾아서 삭제한다. (/Usr/xxxx/.android/debug.keystore 의 파일을 삭제하고 난 뒤 다시 갱신한다.) 파일을 삭제한 뒤 다시 프로젝트..

Development/Android 2011.07.18

파티톡 1.0.1 업그레이드.

지난주에 출시한 파티톡을 1.0.1 버전으로 업그레이드 했다. 기존 버전에 비해서 네트워크 부하를 좀 줄이고 초대전화번호의 예외처리 로직을 좀 더 추가했다. 생각하지 못한 여러가지 변수가 발견되었다. 기존에 로그를 남기는 로직을 쓰레드로 돌렸다. 다음 로직을 실시간으로 따로 돌릴수 있어서 속도가 조금 향상되었다. 1.0.1 버전으로 업그레이드 한 뒤의 소감은.. 실제 체감 속도가 조금 빨라졌다. 앱이 좀 더 안정감있게 실행된다. 아직은 홍보부족으로 회원수가 얼마 없지만, 조만간에 많이 불어날거라 생각한다..

Development/Android 2011.02.17

목록에서 링크걸기.

안드로이드에서 링크처리는 의외로 간단하다. 예를 들어서 텍스트뷰에서의 링크처리는 XML attribute 에서 autoLink="all" 정의만 해주면 웹사이트, 이메일, 전화 등등을 자동으로 처리해준다. 하지만 일반 액티비티가 아닌 어댑터를 확장한 클래스의 경우는 얘기가 달라진다. 우선, 02-09 14:40:26.263: ERROR/AndroidRuntime(8515): Uncaught handler: thread main exiting due to uncaught exception 02-09 14:40:26.302: ERROR/AndroidRuntime(8515): android.util.AndroidRuntimeException: Calling startActivity() from outside ..

Development/Android 2011.02.09

Widget Life Cycle.

안드로이드 액티비티 라이프사이클 만큼 중요한 위젯 라이프사이클이다. 일반 액티비티와 위젯의 라이프사이클은 개념이 좀 틀리다. 일반 액티비티를 사용하는 어플과 위젯 어플은 완전히 다른 방법으로 만들어진다. 먼저 라이프사이클의 순서를 보면, widget 정의 -> widget instance 생성 -> onUpdate -> 바탕화면의 widget view 상에서의 사용자의 터치에 반응 -> 바탕화면에서 widget instance 제거 -> widget package 제거 1. widget 정의. - AppWidgetProvider 를 상속 구현하는 java class 와 widget 의 layout view 가 필요하다. - manifest 에 정의하고 /res/xml 디렉토리 밑에 provider.xml..

Development/Android 2010.08.06

특별한 갤럭시S.

그다지 좋은 뜻은 아니고.. 안드로이드어플 개발하면서 먼저 애뮬레이터부터 모토로이, 갤럭시A, 갤럭시S, 그외 기타 등등의 디바이스 순서로 테스트 하는데 항상 갤럭시S가 문제를 일으킨다. 같은 갤럭시S중에서도 어떤 디바이스는 괜찮은데 다른 디바이스는 오류를 뱉어내는 등 종잡을 수 없을때가 왕왕 있다. 분명히 안드로이드 API 를 따라서 만들면 잘 돌아가야 하는데 그게 아니다. 피쳐폰 어플을 만드는 기분. 아직까지 내가 담당한 어플은 다행히 그런일이 없지만 옆의 김모대리는 장난아니다. 항상 야근이다. 일반 어플에서도 그런 현상이 일어나지만 위젯프로그램에서의 빈도가 높은것 같다. 그리고 단지 안드로이드 API 의 문제라기 보다는 스피커, 볼륨 등등 주로 하드웨어와 밀접한 관계가 있고 그쪽 기능들을 많이 사용..

Development/Android 2010.08.05