[Android]Google Maps的申請、設定與使用

行動設備使用Location定位服務越來越火紅,很多人都有很多有趣的想法,像是利用Location查詢所在位置四週的商家資訊、將照片置入所在位置的經緯度方便分享及記錄、還有隨時可以追蹤好友所在位置等等等許多服務。雖然有了定位資訊,可是少了一個展示的平台,Google Map就是一個很好用又免費的元件,可以把經緯資訊展示出地圖資訊,方便閱讀及應用。

在android開發環境上要使用google map這個元件,並無法直接拖拉元件至畫面上,需要申請一組api key,然後設定到Layout資源檔裡,以下範例簡單的說明如何申請一組google map api key及設定Layout檔main.xml。

參考資料Location and Maps | Android Developers

1.如何申請指紋碼

要向Google申請服務的指紋碼,需要先在本機端產生MD5的指紋證書,再利用這個證書產生指文碼。

如何產生指紋證書呢?只需要在jdk的安裝路經bin目錄下,輸入

其中”名稱.keystore"請自行設定喜好的名稱,再來畫面會要求你輸入一些基本資訊,大概內容如下圖,密碼部份這個範例為test123。名稱姓氏、單位名稱、組織名稱、城市或地區名稱、州及省份名稱、國碼

產生keystore




完成後可得到需要的keystore

產生keystore結果

如果不想自己產生認證證書可以直接使用安裝android sdk自行產生的debug.keystore,路徑如下:

  • 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

再來是利用指紋證書來取得指紋碼,只需要輸入:

其中"[路徑/檔案名稱]"可以是上一步產生的keystore或是直接取用android sdk產生的,密碼部份此範例使用test123,畫面如下,會產生一組認證指紋碼,把此指紋碼copy下來

keystore指紋碼

向Google申請Maps API key,網址:http://code.google.com/android/maps-api-signup.html

需要同意條款及給於自行產生的指紋碼,把上一步所得結果貼到input裡,按Generate API key

向Google申請Maps API key

然後會response一個金鑰及xml配置範例,直接copy範例裡的內容使用就可以了

Google sign key

以上申請流程就已經完成了,以下是如何使用此金鑰

2.建立Google Map Android專案

如何安裝Eclipse及android sdk請參考 使用Eclipse galileo 開發android軟體

New一個新的Android Project,給於project name、Application name、Package name、要建立的Activity及要使用的android sdk版本,因為要使用到Google Map,所以要選Target Name是Google APIs的,後面3 4 6 7 這些數字是sdk的版本,開發時可以限定最小的sdk版本為何,Google Map需要最少3以上的版本。

建立Android專案

建立好專案後,把主要的Activity打開(在src目錄下),然後把extends從原本的Activity改成com.google.android.maps.MapActivity,然後再建立需要override的函數。

MapActivity

再來打開資源檔目錄下layout裡的main.xml打開,選擇main.xml變換成xml的編輯模式,然後把上面取得的Google Map xml範例內容全數貼到需要的位置上(依Layout排版不同可能有所差別,預設是在倒數第二行貼上)

main.xml

再來切換到Layout模式,就可以看到元件已在畫面上了

GoogleMaps教學

再來可以試看看能不能跑,在專案名稱上按右鍵選Run As->Android Application

Run Android

再來需要選擇要啟動的模擬器或是實際機器做測試,視窗分成上下二層,上層是啟動中的設備,下層是可以啟動的設備,要如何建立設備,可以參考使用Eclipse galileo 開發android軟體

Android Virtual Device

這裡可以先Start模擬器,或是選擇Ok讓系統自行啟動

Start Android Virtual Device

再Eclipse下方可以看到Console啟動的流程

Android Console

等一下子後模擬器就啟動好了,這時需要解開銀幕鎖,按住右鍵依圖上方向解開鎖

Android Virtual Device

有時啟動模擬器時,會有些程式來不及載入,所以會有以下畫面,可以選擇Wait讓它完成作業(建議)

Process no response

ps.如果啟動不了時,可以再使用Run As步驟一次

理論上啟動後會出現以下錯誤,這是正常的,因為還有些地方沒有設定到

Google Map run Error

回到Eclipse專案目錄上,選擇AndroidManifest.xml來做一些權限的設定,首先Mainfest項目裡設定Use Sdk(建立專案時有設,就可以略過),Google Map需使用3以上版本。

androidMainFest.xml MainFest

再來選擇Permissions項目,增加程式所需要的權限,因為程式目前只需要上網取得Google Map的資料,所以給與Internet權限就可以了,設定如下圖。

android google map permissions

android google map permissions

再來因為有使用特殊的Lib,也就是Google Map Library,所以需要給於指定,設定方法如下圖。

set Google Map Library

set Google Map Library

再來啟動程式,此時模擬器已在上層(啟動中),直接選擇它再Run就可以了

createProject11.png

因為沒有初始Google Map的位置,所以只會出現白白的一片

createProject18.png

下幾章再來介紹如何使用Android Google Maps




31 comments on “[Android]Google Maps的申請、設定與使用

  1. yku大大你好

    你的這份教學文件寫得真好

    我根據你的步驟也做到跟你一樣的結果

    想請問你接下來的步驟該如何進行

    最近剛好需要使用到這部分的研究

    謝謝

  2. 說好的"介紹如何使用Android Google Maps"呢Q_Q
    yku大大這份寫得很棒呢
    請問後續甚麼時候會寫呢?

  3. 可以麻煩你寄教學給我嗎?
    因為最近模擬器急需要用到這部分內容
    你的教學很詳細!讚!

  4. 之所以是空的是因為你去申請API的signature跟你用來sign android app的signature不是同一個。跟有沒有給預設位置沒什麼關係。

  5. 我電腦裡的指紋認證跑不出MD5格式 一直跑出SHA1格式 而且我設出的KEYSTORE是2048位元該怎麼辦

  6. 我電腦跑出的認證指紋不是MD5而是SHA1的 而且設出來的KEYSTORE是2048位元該怎麼辦

  7. [儲存 joyce.keystore]
    keytool 錯誤: java.io.FileNotFoundException: joyce.keystore (存取被拒。)

    他會出現錯誤@@
    有人說在把joyce.keystore改成 .\joyce.keystore或 c:/joyce.keystore
    但還是不行了
    是為什麼?

  8. 最近在研究這方面的東西
    API的部分都設定好了
    可是模擬器的定位有點麻煩
    還有很多東西摸了好多天還是沒辦法處理
    不知道版大有沒有後續教學

  9. 你好!
    我電腦跑出的認證指紋也不是MD5是SHA1的
    請問該怎辦呢?重新建立專案的意思是??

  10. 請問一下我用命令提示元

    但是我預設路徑是c:\users\213>
    但是,我的keytool在C:\Program Files\Java\jdk1.6.0_12\bin

    要怎麼寫成大大你的樣子

  11. 我的Activity還是出現錯誤,我已經照你上面的打了
    但還是出現錯誤無法執行
    package maps.android;

    import android.app.Activity;

    public class MainActivity extends com.google.android.maps.MapActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }

    @Override
    protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
    }

    }

    我不懂這錯在哪
    請大大解惑

發表迴響