行動設備使用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目錄下,輸入
keytool -genkey - v -keystore 名稱.keystore
其中”名稱.keystore"請自行設定喜好的名稱,再來畫面會要求你輸入一些基本資訊,大概內容如下圖,密碼部份這個範例為test123。名稱姓氏、單位名稱、組織名稱、城市或地區名稱、州及省份名稱、國碼
完成後可得到需要的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
再來是利用指紋證書來取得指紋碼,只需要輸入:
keytool -list -keystore [路徑/檔案名稱] -storepass 密碼
其中"[路徑/檔案名稱]"可以是上一步產生的keystore或是直接取用android sdk產生的,密碼部份此範例使用test123,畫面如下,會產生一組認證指紋碼,把此指紋碼copy下來
向Google申請Maps API key,網址:http://code.google.com/android/maps-api-signup.html
需要同意條款及給於自行產生的指紋碼,把上一步所得結果貼到input裡,按Generate API key
然後會response一個金鑰及xml配置範例,直接copy範例裡的內容使用就可以了
以上申請流程就已經完成了,以下是如何使用此金鑰
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以上的版本。
建立好專案後,把主要的Activity打開(在src目錄下),然後把extends從原本的Activity改成com.google.android.maps.MapActivity,然後再建立需要override的函數。
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
再來打開資源檔目錄下layout裡的main.xml打開,選擇main.xml變換成xml的編輯模式,然後把上面取得的Google Map xml範例內容全數貼到需要的位置上(依Layout排版不同可能有所差別,預設是在倒數第二行貼上)
再來切換到Layout模式,就可以看到元件已在畫面上了
再來可以試看看能不能跑,在專案名稱上按右鍵選Run As->Android Application
再來需要選擇要啟動的模擬器或是實際機器做測試,視窗分成上下二層,上層是啟動中的設備,下層是可以啟動的設備,要如何建立設備,可以參考使用Eclipse galileo 開發android軟體
這裡可以先Start模擬器,或是選擇Ok讓系統自行啟動
再Eclipse下方可以看到Console啟動的流程
等一下子後模擬器就啟動好了,這時需要解開銀幕鎖,按住右鍵依圖上方向解開鎖
有時啟動模擬器時,會有些程式來不及載入,所以會有以下畫面,可以選擇Wait讓它完成作業(建議)
ps.如果啟動不了時,可以再使用Run As步驟一次
理論上啟動後會出現以下錯誤,這是正常的,因為還有些地方沒有設定到
回到Eclipse專案目錄上,選擇AndroidManifest.xml來做一些權限的設定,首先Mainfest項目裡設定Use Sdk(建立專案時有設,就可以略過),Google Map需使用3以上版本。
再來選擇Permissions項目,增加程式所需要的權限,因為程式目前只需要上網取得Google Map的資料,所以給與Internet權限就可以了,設定如下圖。
再來因為有使用特殊的Lib,也就是Google Map Library,所以需要給於指定,設定方法如下圖。
再來啟動程式,此時模擬器已在上層(啟動中),直接選擇它再Run就可以了
因為沒有初始Google Map的位置,所以只會出現白白的一片
下幾章再來介紹如何使用Android Google Maps
請問有出”介紹如何使用Android Google Maps”這篇文章??
“介紹如何使用Android Google Maps” 是否有這篇文章??
被你發現我偷懶了!!!程式好像有!!這二天我再補上,..哈哈
@yku, 大概什時會好??
@yku, 嗨!!大大謝謝您!!我有收到了,還有您的教學文章不錯是否會出教學文章??
最近有點瞎忙….會補上…
先給你看看有沒有用
@遊客, 不好意思 使用的教學文章方便也給我一份嗎?
yku大大你好
你的這份教學文件寫得真好
我根據你的步驟也做到跟你一樣的結果
想請問你接下來的步驟該如何進行
最近剛好需要使用到這部分的研究
謝謝
說好的”介紹如何使用Android Google Maps”呢Q_Q
yku大大這份寫得很棒呢
請問後續甚麼時候會寫呢?
要等過一陣子了…好久沒更新資料了…好忙…
大大~我現在也卡在這一步~等你補救啦(急)
大大~我也卡在這一關了~等你補救啦:D
~我現在也卡在這一步~等你補救
可以麻煩你寄教學給我嗎?
因為最近模擬器急需要用到這部分內容
你的教學很詳細!讚!
you write really great!!
would you send another teaching article to my mailbox?
you write really great!!
would you send another teaching article to my mailbo?
addd
之所以是空的是因為你去申請API的signature跟你用來sign android app的signature不是同一個。跟有沒有給預設位置沒什麼關係。
謝謝指教
我電腦裡的指紋認證跑不出MD5格式 一直跑出SHA1格式 而且我設出的KEYSTORE是2048位元該怎麼辦
我電腦跑出的認證指紋不是MD5而是SHA1的 而且設出來的KEYSTORE是2048位元該怎麼辦
你可以重新建立你的專案…然後把我的程式copy進去…
[儲存 joyce.keystore]
keytool 錯誤: java.io.FileNotFoundException: joyce.keystore (存取被拒。)
他會出現錯誤@@
有人說在把joyce.keystore改成 .\joyce.keystore或 c:/joyce.keystore
但還是不行了
是為什麼?
別放c:試看看?
你好,寫得真詳細!!謝謝~真受用呢~>_<
請問有後續步驟的教學嗎??謝謝你~:)
最近在研究這方面的東西
API的部分都設定好了
可是模擬器的定位有點麻煩
還有很多東西摸了好多天還是沒辦法處理
不知道版大有沒有後續教學
你好!
我電腦跑出的認證指紋也不是MD5是SHA1的
請問該怎辦呢?重新建立專案的意思是??
@新手, 先建好專案
再把程式碼copy進去只copy需要的
請問一下我用命令提示元
但是我預設路徑是c:\users\213>
但是,我的keytool在C:\Program Files\Java\jdk1.6.0_12\bin
要怎麼寫成大大你的樣子
我的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;
}
}
我不懂這錯在哪
請大大解惑
@Tracy Mac,
請問你的錯誤訊息可以給我嘛?