Devlopment/Mobile

    안드로이드 여러 버전의 APK 배포

    원래는 하나의 APK만 마켓에 올릴 수 있었지만 얼마 전(2011년 7월쯤)부터 마켓에서 여러 버전의 APK를 올릴 수 있도록 지원해준다고 한다.[1][2][3] 각기 다른 플랫폼 버전, 화면 구성, OpenGL 텍스쳐 압축 포맷에 따라서 APK를 따로 올릴 수 있는 것이다. 올리는 방법은 기존에 올라가있는 APK에 추가적으로 APK를 올리고 같이 활성화할 수 있는 듯하다. (아직 나도 안해보았다.) 개발자 입장에서 볼 떄, 한 가지 버전에 따라서 여러가지 장비에 맞춰 개발을 각기 하고 관리한다는 것은 매우 번거롭고 힘든 일이다. 굳이 따로 하고 싶지 않았지만 이것에 대해 찾아보게 된 이유는 기존에 올렸던 앱이 2.1만을 지원하게 해놓았는데, SD카드와 기기설치를 고를 수 있게 해달라는 요청이 있어서였다..

    Windows Phone7 개발 관련 사이트

    개발자 커뮤니티 1. AppHub (http://create.msdn.com/ko-KR/) - 기존의 XNA Creators Club이 2010년 10월 11일에 App Hub로 개편됌 - 윈도우폰7과 XBox Live 인디 개발자들을 위해 무료 툴, 소스 , 커뮤니티 등 제공 2. XNA 게임 스튜디오 익스프레스(http://cafe.naver.com/xna) 3. 윈도우 모바일 개발자 카페 (http://cafe.naver.com/winmodev) 블로그 1. 곰동의 연금술사 (http://gomdong-alchemist.tistory.com/) 2. 서진호의 윈도우7 이야기 (http://blogs.msdn.com/b/jinhoseo/) 3. Think out of the Box (http://bl..

    [WIndow Phone7] The type 'System.IObservable`1<T0>' is defined in an assembly that is not referenced.

    Error3The type 'System.IObservable`1' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Observable, Version=2.0.5.0, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e'.... 내가 제일 싫어하는 에러다. 무엇이 문제인지 모호하게 뜨는 에러, 이래서 MS 개발을 싫어했다. 당연히 국내에는 이런 형태의 문제에 대한 웹 문서가 없다. 하지만 역시 구글신님께서 알려주셨다. [1]을 보면 아래쪽에 친절하게 System.Observable를 Reference에 추가하지 않아서 생긴 문제라고 알려주었다. 괜히..

    [안드로이드] TabActivity에서 startActivityForResult의 결과 받기

    잠깐 이 문제로 많은 난항을 겼었다. 일반적인 Activity의 경우에는 startActivityForResult로 호출하고 호출되어진 Activity에서 setResult에 결과를 넣어주면 호출한 Activity에서 onActivityResult를 통해 결과를 받을 수 있다. 그런데, 문제는 TabActivity를 호출해서 TabHost의 Activity에서 결과를 돌려주려면 문제가 생겼다. 다음 상황이다. A.class - 메인 페이지, B 클래스를 startActivityForResult로 호출 B.class - TabActivity로서 TabHost로 C 클래스를 갖고 있다. C.class - setResult로 결과를 돌려준다. 이러한 구조를 갖고 있을 경우에 결과를 돌려줄 때, C 클래스에서 ..

    java.io.IOException: Unable to open sync connection! 해결법

    간단한 코드를 바꾸가며 기기로 테스트를 반복하던 도중 java.io.IOException: Unable to open sync connection! 라는 에러가 발생하였다. 이클립스 꺼보고, adb.exe 종료해보고, USB 선 뽑았다 빼도 문제가 해결돼지 않았다. 결국 해결은. 환경설정 > 응용프로그램 > 개발 > USB 디버깅 을 해제했다가 다시 설정하니 다시 정상 동작하였다.

    ListView 스크롤시 검은색 배경으로 바뀌는 문제

    * ListView 스크롤시 검은색 배경으로 바뀌는 문제 문제) 배경 지정한 Layout에 투명 ListView를 놓았는데 스크롤시 ListView의 배경이 검정색으로 바뀜 해결) [1][2]에 나온대로 ListView에 android:cacheColorHint="#00000000" 를 지정 처음에 #00000000이 아니고 #000000인줄 알고 #000000으로 고치는 삽질을 잠깐 함. * ListView 구분선 색깔 변경법 배경색 문제를 해결한 후에 이번에는 구분선 색깔을 바꾸려다 문제가 생겼다. ListView의 divider 속성을 바꾸면 돼는데 실행하면 바껴있지 않은 것이다. 알아보니 [3]에 나온대로 내가 마음대로 색깔을 줄 수 있는 것이 아니었다. 지정되어진 값이 있고 그 값을 지정해주어야..

    안드로이드 GPS 위치 수신

    아이폰의 경우는 위치 서비스를 꺼 놓을 경우에 현재 위치를 확인할 수 없다. 그러나 안드로이드는 이와 다르게 GPS를 꺼놓아도 네트워크를 이용해 위치 정보를 수신할 수 있다. 처음에는 네트워크를 이용한 위치를 찾는 방법이 직접 구현해야 하는지 알았는데 그렇지 않다. 기본적으로 안드로이드 API에서 제공해준다. A-GPS S-GPS 설명 * 네트워크에 위치한 서버로 수신 가능한 위성의 현재 위치를 데이터로 수신 * 수신된 GPS 위치를 처리하는 GPS로 스마트폰등의 데이터 송/수신이 가능한 기기에 적용 * 서버접속 없이 단독으로 위성과 통신하는 GPS * 차량용 내비게이션등 데이터 송/수신을 하지 않는 기기에 적용. 장점 * 배터리 소모가 적고 수신시간이 빠름 * 위성의 위치를 서버로 부터 받기 때문 * ..

    Android 타이틀 바 관련.

    자체 타이틀 바 사용 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title); 타이틀 바 제거 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); AndroidManifest.xml에서 타이틀 바 제거 Activity 또는 Application 태그 안에 android:theme="@android:style/Theme.NoTitleBar"

    안드로이드 ListView구현시 Adapter의 getView 중복 호출 문제

    부왘ㅋㅋㅋㅋㅋㅋㅋㅋ!! 오랜만에 미친듯한 삽질을 경험하게 해주는 안드로이드에게 경의를 표한다. 안드로이드 개발을 하는 중에 내가 만든 페이지가 자꾸 느려지는 현상을 발견하고 로그를 찍어서 로그캣에서 느려지는 구간을 찾았다. 문제는 이 문제점을 찾는데 너무 많은 시간을 소비했다. 나의 코딩 스타일에 문제가 있나 의구심이 들었는데, 안드로이드만에 독특한 문제였다. 문제점은 레이아웃 xml에 있었는데 ListView를 구현할 때 getView가 중복 호출되면서 미묘하게 시간을 잡아먹는 문제였다. 찾아보니 많은 사람들이 나와 같은 문제를 겪고 있었다. Reference [1] 해결법 1 : http://www.androidpub.com/41674 [2] getView 호출에 대한 좋은 설명을 해주신 개발자분 :..

    [Android] 알림 - AlertDialog, Toast

    [Android] 알림 - AlertDialog, Toast

    AlertDialog를 이용하면 알림과 버튼을 제공하고 Toast를 이용하면 메시지를 사용자에게 전달해줄 수 있다. 1. Toast Toast.makeText(PersonalActivity.this, "Message", Toast.LENGTH_LONG).show(); 2. AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Title"); builder.setMessage("Message"); builder.setNegativeButton("NegativeButton", new DialogInterface.OnClickListener() { @Override public void onClick(..