google地圖密鑰申請與將google地圖集成到自己的程序中(附源代碼)

      開發google地圖,很重要的一個類就是MpaViewMapView類是一個讓你的應用可以和Google Maps融合到一起的類,就是說通過MapView你可以讓你的應用來下載、顯示、標記和控制Google Maps。但爲了得到地圖數據,你就必須進行註冊來得到一個Maps API key(即google地圖API密鑰)。當然在程序開發和測試階段,這個Maps API key還只是臨時的,它現在和SDK debug certificate唯一綁定,當你的應用要發佈的時候,你必須根據你的要發佈的certificate來註冊一個新的Maps API Key,這個先不管。我們來看怎樣得到一個臨時的,即在開發和調試的時候使用的根據debug certificate得到的Maps API Key

要註冊得到Maps API key,步驟如下先得到debug keystone的位置,然後根據這個debug keystone文件再得到MD5指紋,最後就是再根據這個MD5指紋得到google地圖API密鑰。

首先就是得到debug keystore的位置,默認情況下,這個debug keystore是你創建的AVD在同一個目錄下的,比如Windows 7系統和 Vista系統:C:\Users\<user>\.android\debug.keystoreOS X Linux系統下是:~/.android/debug.keystore。當然這種查看方式很麻煩,簡便的是,如果你是用Eclipse+ADT進行android開發的話,你可以通過這樣的方式來得到debug keystore的位置:在Eclipse中點Windows>Preferences>Android>Build,在右側窗口中你就可以看到,有Default debug kystore

標題後面就是,比如我的是C:\Users\lx\.android\debug.keystore,複製下來,然後在dos命令行中輸入:

 

  1. keytool -list -alias androiddebugkey -keystore "C:\Users\lx\.android\debug.keystore" -storepass android -keypass android -v
其中keystooljdk安裝目錄的jre/bin目錄下的一個命令,如果你沒有配置環境變量的話,需要先轉到jre/bin目錄再執行上面的內容,這樣就會得到一個MD5 fingerprint,是類似於這樣的:

 

 

  1. MD5: 97:91:D9:36:C9:99:F1:16:CD:9B:5D:B3:F8:49:37:3E
然後將這個MD5指紋,複製下來,打開這個鏈接:

 

http://code.google.com/intl/zh-CN/android/maps-api-signup.html,把剛纔的MD5指紋輸入到指定位置,並在前面打上對號,然後點Generate API Key,就會得到我們費了這半天的勁想要得到的Google地圖API密鑰了,這個Maps API key是類似於這樣的一串代碼:

 

  1. 0a5PgXEMxha3KPIzWyUsr5AUCEueqpcEIPDm8Zg
注意,在上面得到MD5指紋的時候,輸入的命令中最後有個-v,而按google教程上的說明,沒有加-v,結果得到了證書指紋 (SHA1),而沒有得到我們要的MD5,這樣在申請Maps API key的是後它會提示“您輸入的指紋無效”。還有一點就是這個申請過程需要你有google賬號,沒有的話可以申請一個,很方便。

 

關於這部分的官方教程可以參看:

http://code.google.com/intl/zh-CN/android/add-ons/google-apis/mapkey.html

 

 

有了這個google地圖API密鑰,就來讓我們正是開發我們的地圖應用。

首先,新建一個Android項目,名爲HelloGoogleMaps。因爲要用到Maps庫,而這個庫又不是標準的android庫,所以需要在AndroidManifest.xml文件中的<application>標籤下加入以下代碼:

 

  1. <uses-library android:name="com.google.android.maps" />
因爲要從互聯網那裏獲得位置數據,所以還要再AndroidManifest.xml文件中加入訪問Internet的權限:

 

 

  1. <uses-permission android:name="android.permission.INTERNET" />
然後就是,要顯示地圖,就要有一個MapView控件了。在佈局文件main.xml文件中加入以下代碼:

 

 

  1. <com.google.android.maps.MapView
  2. android:id="@+id/mapview"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:clickable="true"
  6. android:apiKey="0a5PgXEMxha3KPIzWyUsr5AUCEueqpcEIPDm8Zg "
  7. />
其中apiKey就是我們前面申請的Google地圖密鑰,clickable屬性爲true表示用戶可以與地圖進行交互。

 

然後打開HelloGoogleMaps.java這個文件,將繼承自ActivityHelloGoogleMaps類,改爲繼承自MapActivityMapActivityMaps庫中的Activity的一個子類。並重寫一個叫isRouteDisplayed()的方法,這個方法是用來顯示路徑信息的,這裏我們沒有這方面的需求,讓其返回false

 

  1. @Override
  2. protected boolean isRouteDisplayed() {
  3. return false;
  4. }
這個關於Google地圖的小項目寫到這裏,就已經可以實現地圖的顯示,並且可以在這個地圖上來回拖動了,不過還沒有我們常見的地圖的縮放功能,這需要在HelloGoogleMapsoncreate()方法中填入以下代碼:

 

 

  1. MapView mapView = (MapView) findViewById(R.id.mapview);
  2. mapView.setBuiltInZoomControls(true);
這時候運行這個程序,你的程序就可以顯示Google地圖,並能夠來回平移和進行地圖縮放了。

 

當然你如果想標記你感興趣的位置的話,請繼續往下看:

首先新建一個名爲HelloItemizedOverlay的類,需要實現ItemizedOverlay這個接口。

然後定義一個ArrayList,用來存放OverlayItem對象(該對象中主要用來存放地理位置等信息):

 

  1. private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
注意在添加完新的OverLayItem對象之後,還要調用populate()方法,只有這樣的話,我們寫的HelloItemizedOverlay類的對象才能正確讀取ArrayList中的OverlayItems對象,並準備繪製它們。

 

然後就是設置用來標記感興趣點的圖標,這個圖標將用來作爲ArrayList<OverLayItem>對象中所保存的所有的OverLayItem對象的圖標。設置這個圖標是在HelloItemizedOverlay的構造器中實現的,所以在HelloItemizedeOverLay類中,重寫一個這樣的構造器:

 

  1. public HelloItemizedOverlay(Drawable defaultMarker) {
  2. super(boundCenterBottom(defaultMarker));
  3. }
其中boundCenterBottom()方法表示將使圖片的中心用來標記感興趣的點。

 

還有就是,在HelloItemizedOverLay類中還需要重寫size()方法,用來返回ArrayList<OverlayItem>中的對象數。

另外再重寫HelloItemizedOverlay的構造方法:

 

  1. public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
  2. super(boundCenterBottom(defaultMarker));
  3. mContext = context;
  4. }
還要重寫onTap()方法,用來當你點擊標記圖標的時候彈出一個對話框,顯示一些從OverlayItem對象那得到的信息:

 

 

  1. @Override
  2. protected boolean onTap(int index) {
  3. OverlayItem item = mOverlays.get(index);
  4. AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
  5. dialog.setTitle(item.getTitle());
  6. dialog.setMessage(item.getSnippet());
  7. dialog.show();
  8. return true;
  9. }
然後返回到前面繼承自MapViewHelloGoogleMasActivity對象,在這裏將創建HelloItemizedOverlay類的對象,獲得標記圖片,和向HelloItemizedOverlay對象的成員變量ArrayList<OverlayItem>的對象中添加OverLayItem對象,其中這個添加到OverLayItem對象中包含了要標記點的地理位置和其他一些文本信息。

 

 

  1. Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);<PRE class=java name="code">//新建HelloItemizedOverlay對象
  2. HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this); </PRE><PRE class=java name="code">//設置經緯度這裏設的是青島的經緯度。(前面的是緯度乘以1000000,後面是經度乘以1000000)
  3. GeoPoint point = new GeoPoint(36040000,120200000);
  4. //新建OverLayItem對象,裏面包含經緯度等信息
  5. OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
  6. //將新建的OverLayItem對象添加到HelloItemizedOverlay類中的ArrayList<OverlayItem>對象中
  7. itemizedoverlay.addOverlay(overlayitem);
  8. //在地圖上顯示標記
  9. mapOverlays.add(itemizedoverlay);</PRE><BR>
  10. <SPAN style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: 宋體; WHITE-SPACE: normal">最後一步就是將,我們要顯示的標記標記在指定位置。</SPAN>
  11. <PRE></PRE>
  12. <P></P>
  13. <PRE></PRE>
  14. <P></P>
  15. <P>然後運行程序,就會得到一張顯示的地圖,和我們標記在某點的一個圖標。</P>
  16. <P><IMG alt="" src="http://hi.csdn.net/attachment/201203/14/0_1331716315U99u.gif"><BR>
  17. </P>
  18. <P>本文可以參考官方API<SPAN style="FONT-FAMILY: 宋體">:</SPAN></P>
  19. <P><A href="http://developer.android.com/resources/tutorials/views/hello-mapview.html">http://developer.android.com/resources/tutorials/views/hello-mapview.html</A></P>
  20. <P>當然,你還可以在此基礎上繼續使用<SPAN style="FONT-FAMILY: Times New Roman">LocationListener</SPAN><SPAN style="FONT-FAMILY: 宋體">來時時更新地圖信息,這裏就不再繼續了。</SPAN></P>
  21. 最後附上源碼:<A href="http://download.csdn.net/detail/yaolingrui/4140501">http://download.csdn.net/detail/yaolingrui/4140501</A>
  22. <PRE></PRE>
  23. <PRE></PRE>
  24. <PRE></PRE>
  25. <PRE></PRE>
  26. <PRE></PRE>
  27. <PRE></PRE>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章