03.08 Google Map開發基礎教程

這篇文章是我一邊學習google map一邊整理的思緒,文章有的地方是從google map最新api直接copy的,也為不能翻牆的朋友帶點福利。

1. 開發前的準備,我的開發工具是AS1.5.1正式版,開發google map應用首先得確保sdk下載了google api和google play service以及google repository(好多帖子主要是讓安裝google play service,不過google api和google repository也下載也沒啥大礙。)

以下是google官方文檔的截圖,這下知道該下載哪個sdk了吧

Google Map開發基礎教程

2. 在AS導入google playservice,可以使用dependecies設置依賴,也可以設置添加extras/google裡的google-play-service.jar的jar包,我這裡使用的是前者,格式如下

compile 'com.google.android.gms:play-services:8.4.0'

3. 大多數涉及第三方服務的都會有第三方開發平臺,有平臺就需要註冊開發者賬號,google也不例外,需要你去註冊,並將你的項目的SHA1碼提交上去,生成APIKey,SHA1碼通過工程的簽名證書獲得,一臺設備一般對應一debug.keystore,

怎麼用命令行讀取這裡就不提及了,

4. 這裡我使用vpn登錄code.google.com註冊了google賬號,

然後進入https://code.google.com/apis/console創建工程

Google Map開發基礎教程

Google Map開發基礎教程

申請完成後大概這樣子。

Google Map開發基礎教程

上面生成的API key配置到AndroidManifest.xml

Google Map開發基礎教程

(下面這張是最新的,上面那張在google目前網站沒有找到,可能已經變成了下面的這個樣子)

Google Map開發基礎教程

6. 注意,你的包名必須和申請的一致才可以,修改了包名以後要重新申請,當然debug.keystore不一樣也要重新申請,就是說我這裡這個key你是用不了的

7. Release版的和debug版的沒什麼差別的,就生成api key的SHA1不一樣。 可以自己給項目打包生成的私人證書然後導出簽名,那就是Release版的。

Release版的證書你不能在eclipse裡面直接run的,直接run的是用debug的簽名的,Release版的需要Export出正式版apk安裝才能正常使用。

8. 準備工作做得差不多了,下面開始去敲代碼,由於我自己也沒有嘗試過google地圖開發,於是我收集了很多以前的博客資料,但是大多數開發的google地圖資料太老舊,太膚淺,涉及功能太少。所以建議買個vpn,直接到google 開發者網站去看google給的地圖最新api,這才是學習的最佳姿勢(我以前也不想用vpn,覺得沒必要花這個錢,但是當你真的想從初級Android跳到更高層次,牆外的世界才是真正美景,我用的速飛躍shadowsocks,買的15塊65G流量,用完為止,我也是第一次用,買個便宜的試試水,反正訪問google網頁速度還行,就算你沒有薪水還是個學生,這點錢你還是花的起,更何況像開發者這樣的高薪人員呢)

下面show一下高大上google api網頁

Google Map開發基礎教程

9. 以下是我綜合收集到的博客以及參考最新google開發者平臺的“最新api”做得開發解析(由於我是一邊開發一邊寫文章,寫到這裡才開始正式看google api,所以可能後面的知識和編號9之前的知識相悖也說不定,如果知識相同,我就不提了,如果與前面的知識衝突,以編號9之後的為準)

10.

(1)新建項目

AS新建project沒有啥好說的,但是在選擇Add an activity to mobile時,我們一般選擇的是第一個和第二個blank activity,這裡google讓我們新建Google Maps Activity,後面的步驟也類似了,項目初次build完畢後,注意在values下有個google_maps_api.xml文件。請注意,<code>google_maps_api.xml/<code> 文件包含有關在您嘗試運行應用前獲取Google Maps API 密鑰的說明,這個文件在project視窗下沒有,在Android視窗才有,文件名後跟了個(debug)

(2)獲取API秘鑰

獲取方式上文已經提到過,這裡不贅述。Google說該密鑰免費。 您可將其用於您的任何調用Google Maps Android API 的應用,並且其支持的用戶數量不受限制。

你可以通過點擊google_maps_api.xml給的路徑去直接申請

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=(sha1碼) %3B(應用包名)

這個路徑就是map的開發指南

https://developers.google.com/maps/documentation/android/start#get-key

複製生成的 API 密鑰,返回 Android Studio,將該 API 密鑰粘貼到 <code>google_maps_api.xml/<code> 文件的<string>

(3)代碼篇

生成項目時,地圖的佈局已經寫好,只是一個fragment碎片,用來顯示android:name="com.google.android.gms.maps.SupportMapFragment"這個路徑下的SupportMapFragment
 
生成項目時生成了繼承自FragmentActivity的MapActivity代替了平時使用的MainActivity

(4)關於測試環境

您需要的模擬器映像具有的 Google API 平臺應基於 Android 4.2.2 或更高版本。

我試過夜神模擬器,由於它不是橋接的本地網絡,即使我使用了vpn,模擬器仍然不能連接google服務,所以沒法測試,用genymotion的朋友可以試試,genymotion使用的是vitrualbox,這個平臺可以設置虛擬機網卡為橋接連本地;開發環境流暢的朋友也可以試試AS自帶的模擬器。最後我直接用公司從國外買回的Android機,手機中也有vpn,可以訪問google(我自己的小米安裝了vpn服務還是不行,我的VPN服務商坑了)

(5)運行程序

以上工作都做完了,就可以運行了,您看到的地圖應該在澳大利亞悉尼位置帶有一個標記。如果您未看到地圖,請確認您已完成本頁面上介紹的所有步驟。具體地講,請確認您已按上文所述添加了 API 密鑰。

我成功後的截圖(突然想住在牆外了有沒有)

(6)其他知識補充

指定 Google Play 服務版本號

在 AndroidManifest.xml 的 <application> 元素內添加以下聲明。 其作用是嵌入編譯應用時所用 Google Play 服務的版本。/<application>

/<code> 元素作為 <code><manifest>/<code> 元素的子元素:

<uses-feature> android:glEsVersion="0x00020000"
android:required="true"/>/<uses-feature>

其作用是將要求通知外部服務。 具體地講,其作用是防止 Google Play 商店在不支持 OpenGL ES 第 2 版的設備上顯示您的應用。

顯示應用的證書信息

API 密鑰是以應用數字證書(即其 SHA-1 指紋)的簡要形式為基礎。要顯示證書的 SHA-1 指紋,請先確保您使用的是正確的證書。您可能有兩個證書:

  • 調試證書:Android SDK 工具會在您執行調試生成階段時自動生成此證書。此證書只能用於要測試的應用。請勿嘗試發佈使用調試證書籤署的應用。Android 開發者文檔中的在調試模式下籤署部分詳細介紹了調試證書。

  • 發佈證書:Android SDK 工具會在您執行版本生成階段時自動生成此證書。您也可以使用 <code>keytool/<code> 程序生成此證書。如果您已準備好向外界發佈應用,請使用此證書。

  • 注意:為了保護您的密鑰庫和密鑰,除非您確信計算機的安全性,否則請不要在命令行中輸入 <code>storepass/<code> 或 <code>keypass/<code>參數。例如,在公共計算機上,可能會有人查看您的終端窗口歷史記錄或正在運行的程序列表、獲取密碼,然後獲得對您的簽署證書的寫入權限。這樣,他們就能修改您的應用或將其替換為他們自己的應用。

  • <code>com.google.android.geo.API_KEY/<code>是建議使用的 API密鑰元數據名稱。可使用具有該名稱的密鑰向 Android平臺上的多個基於 Google Maps的 API(包括 Google Maps Android API)驗證身份。出於向後兼容性上的考慮,該 API 還支持<code>com.google.android.maps.v2.API_KEY/<code>名稱。該舊有名稱只允許向 Android Maps API v2驗證身份。應用只能指定其中一個 API密鑰元數據名稱。如果兩個都指定,API會拋出異常。

/<meta-data>

/<meta-data>


分享到:


相關文章: