안드로이드

안드로이드 구글맵 어플 google map googlemap

raulyo 2010. 3. 8. 18:35

1.BuildTarget을 Google APIs로 선택 안드로이드 플랫폼버전 2.1, API Level을 7로 설정하여 프로젝트를 생성한다. 


2. HelloMaps가 프로젝트이름이라면 

다음과 같이 작성한다. 

package com.androidhuman.example.HelloMaps;

import android.os.Bundle;
import com.google.android.maps.MapActivity;

public class HelloMaps extends MapActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         //맵확대,축소버튼달기
        MapView mapView = (MapView)findViewById(R.id.mapview);
        LinearLayout layout = (LinearLayout)findViewById(R.id.zoomCtrls);
        layout.addView(mapView.getZoomControls());//MapView에 ZoomControl를 얻어옵니다.
        mapView.setClickable(true);
        
        mapView.setStreetView(false);//도로보기
        mapView.setTraffic(false);//교통보기
        mapView.setSatellite(true);//위성 사진 보기
        
        //맵은 위치를 나타내는 GeoPoint를 이용하여 위치를 표현한다. 
        //GeoPoint는 백만 단위의 위도와 경도값을 이용하여 위치를 표현한다. 
        //지오코딩을 하여 주소값에서 위도/경도를 얻어오고 그 값으로 GeoPoint를 생성한후
        //생성된 GeoPoint객체를 이용해 원하는 위치로 이동하는 코드를 간략히 짜보면
  /*      
        Geocoder gc = new Geocoder(this,Locale.getDefault());
        List<Address> adds = gc.getFromLocationName("위지정보", 5);
        int lat = (int)adds.get(0).getLatitude()*1000000;
        int lng = (int)adds.get(0).getLongitude()*1000000;
        GeoPoint gt = new GeoPoint(lat,lng);
        mapView.getController().setCenter(gt);
        mapView.getController().animateTo(gt);
   */     
        //맵에 그림을 그리기 위해서는 projection모드로 이용하여 GeoPoint의 지리좌표를 
        //화면에 그림을 그리기 위한 화면 좌표로 변경해야 한다. 
   /*     
        Point point = new Point();
        projection.toPixels(geoPoint.myPoint);//geoPoint의 값을 변환하여 point에 저장
        projection.fromPixels(point.x,point.y);//point값을 통해 GeoPoint값을 얻음
   */
        
    //    그리고 사용자의 위치와 방향은 나타내기 위해 설계된 MyLocationOverlay와
    //    화면에 간단한 마커를 그릴 수 있는 ItemizedOverlay 와 OverlayItem 가 있지요....
       /*
       
        Drawable marker=getResources().getDrawable(R.drawable.mapmarker);
        marker.setBounds(0, 0, marker.getIntrinsicWidth(),
        marker.getIntrinsicHeight());
        mapView.getOverlays().add(new InterestingLocations(marker));


            class InterestingLocations extends ItemizedOverlay {
                private List<OverlayItem> locations = new ArrayList<OverlayItem>();
                private Drawable marker;
                public InterestingLocations(Drawable marker) 
                {
                    super(marker);
                    this.marker=marker;

                    GeoPoint disneyMagicKingdom = new
                    GeoPoint((int)(28.418971*1000000),(int)(-81.581436*1000000));
                    GeoPoint disneySevenLagoon = new
                    GeoPoint((int)(28.410067*1000000),(int)(-81.583699*1000000));
                    
                    locations.add(new OverlayItem(disneyMagicKingdom , 
                             "Magic Kingdom", "Magic Kingdom"));
                    locations.add(new OverlayItem(disneySevenLagoon ,
                             "Seven Lagoon", "Seven Lagoon"));
                    populate();
                }
            public void draw(Canvas canvas, MapView mapView, boolean shadow) {
                super.draw(canvas, mapView, shadow);
                boundCenterBottom(marker);
            }

            protected OverlayItem createItem(int i) {
                return locations.get(i);
            }
            public int size() {
                return locations.size();
            }
            
        }
        */
    }
    
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}


3. main.xml을 다음과 같이 작성한다. 

<com.google.android.maps.MapView
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:apiKey="0I_NONwj7J4X1B7FysqvDqhpaMW8DjKCKy88Z1g"
  android:clickable="true"
  />


4. androidmanifest.xml에 다음을 추가한다. 

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" android:required="true"></uses-library>

5. main.xml에 apikey는 다음과 같은 방법으로 구글에서 받는다. 

구글맵을 Android에서 사용하려면,
http://code.google.com/intl/ko-KR/android/add-ons/google-apis/index.html
위의 링크를 통해 Android용 Google Map API Key에 가입( http://code.google.com/android/add-ons/google-apis/maps-api-signup.html)해야한다.
이를 위해서는 MD5키를 입력해야하는데  이 키는 Android용 Eclipse설치 시에 같이 설치되는 디버깅 툴인 ADT(Android Development Tools)에 포함되어있다.

JDK가 설치된 폴더의 Bin폴더에서 다음과 같이 입력을 한다.

1) 디버깅 용 키 MD5 생성(install 하면 잘 나옴)
 
명령창에서 

keytool -list -keystore 해당프로젝트debug.keystore경로 -storepass android -keypass android -v


2) 릴리즈용 키 MD5 생성 - (키와 키스토어를 만든뒤에 매니패스트에서 use the export wizard로 siged.apk를 만들고 install하면 구글맵이 보이지 않음...jarsigner를 이용해도 안됨...하다 포기-_-)

1. keytool을 이용하여 key를 만든다.
cmd창 들어가서
keytool -genkey -alias 키이름.keystore -keyalg RSA -validity 20000 -keystore 경로/키이름.keystore
ex) keytool -genkey -alias roter.keystore -keyalg RSA -validity 20000 -keystore roter.keystore
(마지막에 경로를 안써 주면 현재 cmd가 위치해 있는 폴더에 keystore를 만든다.)

엔터를 치면 암호 입력하라고 나온다. 암호 입력하면 이것저것 물어본다. 참고로 대한민국 국가 코드는 82이다.
입력한 내용 맞냐고 물어보면 y 입력한다.

2. 구글맵을 쓰는 경우 릴리즈용 apikey를 발급 받아야 한다. 개발 시에는 debug.keystore로 발급 받은 apikey를 썼겠지만, 배포시에는 이제 release용으로 발급 받은 keystore의 apikey를 써야하기 때문에..
apikey발급 받는 것은 다른 게시글에도 있지만 또 적어 보자면..
keytool -list -alias 키이름.keystore -keystore 키이름.keystore
ex) keytool -list -alias roter.keystore -keystore roter.keystore
암호 물으면 역시 패스워드 치면 된다.

keytool -list -keystore 생성한 키스토어명 -storepass  생성한 키스토어비번 -keypass  생성한 키스토어비번 -v

그럼 이제 맨 아래있는 MD5값을 복사하여 아래의 입력창에 입력하고 "Generate API Key"를 누른다.

apikey생성!!



1) result debug용 apikey발급 완료

사용자 키:
0I_NONwj7J4VFYFCDExPAucW0jOCXFi_J1F0mYw

2) 릴리즈용 apikey 발급완료

사용자 키:
0I_NONwj7J4VqVrCtfeEnqIlny5oYr0zQy3Essw

6. 프로젝트를 실행할때 avd는 반드시 google apis 2.1 7레벨의 에뮬로 실행한다.