본문 바로가기

안드로이드 개발

안드로이드 디스플레이 크기 값 얻어오기 개발을 하다보면 아이폰이나 아이팟 혹은 아이패드처럼 딱 지정된 몇개의 해상도만 쓰는것이 아니라. 워낙 기기별로 뒤죽박죽이라서 디스플레이를 멀 쓰는지 필요할때가 생겼다. 간단하게 해당 소스를 사용해서 디스플레이의 width 및 height 값을 가져올 수 있다. Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int display_width = display.getWidth(); int display_height = display.getHeight(); 더보기
안드로이드에서 현재 최상위 Activity 값 알아보기 안드로이드 어플을 개발하면서 Activity중 어느 Activity가 현재 최상위에 나와있는지 조건문으로 확인을 하려고 했는데, 어디서 봐야할지를 몰라서 고민하던중 찾은 방법이다. ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List Info = am.getRunningTasks(1); ComponentName topActivity = Info.get(0).topActivity; String topactivityname = topActivity.getPackageName(); 해당 소스를 작성한뒤 Log.d(TAGNAME, topactivityname); 위와 같이 로그를 찍어보면 최상위 Activity.. 더보기
안드로이드 Cursor 사용시 Finalizing a Cursor that has not been deactivated or closed. 문제 해결. 안드로이드 앱을 만들면서 앱자체가 죽어버리지는 않는데, LogCat 상에서 붉은색 글씨로 Finalizing a Cursor that has not been deactivated or closed. 이라는 메시지가 나왔다. 검색을 해보았더니 메모리 릭이 발생하는 부분이라서 어찌되었든 수정이 필요한 부분이었다. 처음에는 단순히 try { } catch(SQLException e){} 정도로만 처리해주면 될 줄 알았는데, try 문 안에 넣어줘도 결과는 마찬가지였다. 소스를 전체적으로 다시 보면서 커서 사용시 닫아줘야 하는데 실제로 안닫아 주고 그냥 넘어간 부분들이 많았다. 예를 들면 Cursor mCursor = null; mCursor = mDb.query(true, DATABASE_TABLE, new .. 더보기
안드로이드 모델명 및 브랜드 이름 등 값 가져오기 기기별 혹은 브랜드 별로 구분을 해야 할 필요등이 생겼을때 유용한 방법 입니다. import android.os.Build; // android.os.Build 를 참조하기 위해서 import 합니다. Log.i("BOARD", Build.BOARD); Log.i("BRAND", Build.BRAND); Log.i("CPU_ABI", Build.CPU_ABI); Log.i("DEVICE", Build.DEVICE); Log.i("DISPLAY", Build.DISPLAY); Log.i("FINGERPRINT", Build.FINGERPRINT); Log.i("HOST", Build.HOST); Log.i("ID", Build.ID); Log.i("MANUFACTURER", Build.MANUFACTURE.. 더보기
안드로이드에서 Device의 고유값 알아보기 프로그래밍을 하다보면 특정 장치라는것을 식별하기 위한 값들을 가져와서 각 장치별로 구분이 가능해야 하는데, 이때 쓸만한 것이 전화번호, IMEI값(?), MAC주소 같은것이 될것 같네요. // 고유 값 알아보기 // 휴대폰의 전화번호 가져오기 TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String phoneNumber = mgr.getLine1Number(); WifiManager wifi = (WifiManager)this.getSystemService(Context.WIFI_SERVICE); String imei = mgr.getDeviceId(); WifiInfo info = wifi.g.. 더보기
이미지 기본 상태와 Press 상태에 따라서 다른 효과 보여주도록 xml 파일 만들기 이미지 기본상태와 Press 상태에 따라서 다른 효과를 보여주고 싶었는데, 소스에서 하나하나 조건식으로 하려니까 별로 좋은거 같지 않았는데, 쉬운 방법을 찾았다. xml 파일을 drawable 폴더쪽에 하나 생성해서 쓰면 되는데 아래와 같은 방식으로 만들어서 넣으면 되고, 이후에 이미지 버튼을 선언할때 ImageButton btn = (ImageButton) findViewById(R.id.생성한xml파일) 식으로 선언해 주면 된다. 더보기
안드로이드 Thread 에서 UI 쓰레드 이외의 쓰레드에서 UI를 변경하는 방법 안드로이드를 개발하면서, 당연스럽게도 Thread를 사용하여 패킷을 일정간격으로 체크해서 패킷이 들어왔을때 동작하도록 프로그램을 짰다. 당연히 잘 될줄 알았는데... 에러를 뿜으면서 전혀 되지를 않는것이었다.. 무엇때문인지 보았더니 Thread 내부에서 변경된 내용을 UI에 보여주는 부분에서 계속 프로그램이 죽어버렸다. 인터넷 서핑을 통해서 왜 그런지 알게 되었는데 "안드로이드 에서는 UI Thread 이외의 Thread 에서 UI를 바꿀수 없다" 라는게 문제같았다... 결국 찾은 방법은 unOnUiThread 를 사용하는 방법이었는데.. 해당 내용을 Thread 내부에 넣고 UI 변경하는 부분을 해당 구문 안에서 실행하게 했더니 에러가 없이 잘 돌아가게 되었다. runOnUiThread(new Runn.. 더보기