Category Archives: Android

[Java/Android] Google Map 연동하기

나의 안드로이드 어플리케이션에 구글맵을 연동하는 방법에 대해 간단히 적어보겠습니다. 우선 구글맵을 사용하기 위해서는 디버그용 API키와 릴리즈용 API키 두가지가 있습니다. 둘다 자신의 인증키를 사용하여 구글맵API키를 발급받습니다. 차이점이 있다면 디버그용키는 자동으로 생성이 되어있고 바로 사용하면 되고 릴리즈용키는 배포할때 따로 만든 키를 이용해야 한다는 점입니다.

레이아웃 구성을 위한 XML에 다음과 같이 맵을 추가하는 것이 우선입니다. 이 부분은 안드로이드 개발에 익숙하실것이라 생각하고 설명은 생략하겠습니다

[code]<com.google.android.maps.MapView
   android:id=”@+id/mvMap”
   android:layout_width=”fill_parent”
   android:layout_height=”fill_parent”
   android:clickable=”true”
   android:apiKey=”<이곳이 키를 적어야 할 곳>”
/>[/code]
우선 디버그용키를 사용하여 개발목적으로 사용하기 위한 방법입니다. 자신의 인증서 지문(?) 문자열을 알아내야 합니다. MD5해시 형태의 문자열입니다. 해당 문자열을 포함하고 있는 키스토어로부터 추출해야 하는데 이 파일은 다음의 위치에 존재합니다.


Windows Vista: C:\Users\<user>\.android\debug.keystore
Windows XP: C:\Documents and Settings\<user>\.android\debug.keystore
OS X and Linux: ~/.android/debug.keystore

[code]keytool -list -keystore <파일위치>[/code]
위와 같이 명령을 입력하게 되면 다음과 같은 화면을 볼 수 있습니다.

사용자 삽입 이미지
맨 아래에 인증서 지문이라는 것이 출력됩니다. 여기서 디버그키의 경우 암호가 없습니다. 그냥 엔터를 입력하시면 됩니다.

이제 저 키를 이용해 구글맵API키를 얻으로 가야할 차례입니다. [이곳]을 방문하도록 합시다.

사용자 삽입 이미지
아래쪽에 입수한 인증서지문을 넣어주고 버튼을 눌러줍시다.

사용자 삽입 이미지
드디어 키가 나왔습니다. 맨 위의 사용자 키가 구글맵API키입니다. 해당키를 XML상의 android:apiKey에 입력해주면 개발시의 모든 상황에 대해 맵을 사용할 수 있습니다.

사용자 삽입 이미지
일반 릴리즈시에는 위와같이 Export Signed Application Package메뉴를 이용하실텐데요, 저때에 사용하는 인증키의 인증서지문을 뽑아서 사용하시면 됩니다.

사용자 삽입 이미지
드디어 구글맵이 뜨는군요^^

[Android] ProgressDialog 재사용시에 멈추는 현상 해결하기

제목에 재사용이라고 썼지만 사실 재사용을 안하는 이야기를 하려고 합니다-_-a 대부분의 책들이 ProgressDialog의 경우 재사용 하는 예제를 싣고 있고 물론 작동을 잘 하고 사용에 아무런 문제가 없습니다.

하지만 여기서 겪는 문제가 있습니다. 스타일을 ProgressDialog.STYLE_SPINNER 쓸때 보면 다이얼로그의 재사용시에 스피너가 회전을 하지 않습니다. 이것 참 난감하더군요.

여기에 대해 다양한 방법론이 제시되곤 합니다. 쓰레드등을 사용하여 비동기로 띄운다거나..하지만 잘 생각해 보면 그냥 재사용 안하면 됩니다; 우리 Dalvik VM의 GC를 믿어보는거죠;

[code]@Override
protected Dialog onCreateDialog(int id)
{
  switch(id)
  {
  case DEFAULT_PROGRESS_BAR:
    dlgProgress = new ProgressDialog(this);
    dlgProgress.setMessage(“Loading…”);
    dlgProgress.setIndeterminate(true);
    dlgProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dlgProgress.setCancelable(false);
    return dlgProgress;
  }
 
  return super.onCreateDialog(id);
}[/code]
이제 다이얼로그를 띄울때는 다음과 같이 showDialog를 사용하여 띄우면 되겠죠.

[code]showDialog(DEFAULT_PROGRESS_BAR);[/code]
이제 다이얼로그를 닫을때 dismiss를 사용하실텐데 다음과 같이 removeDialog도 해주시기 바랍니다.
[code]dlgProgress.dismiss();
removeDialog(DEFAULT_PROGRESS_BAR);[/code]
이제 평소에 비해 좀 더 좋아보이시나요?