1. 程式人生 > >GoogleMap開發小白入門篇

GoogleMap開發小白入門篇

這篇文章是我一邊學習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了吧


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賬號,


申請完成後大概這樣子。

 

上面生成的API key配置到AndroidManifest.xml
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDFGLwpvnJ33QxKvHPY7MxrhbNUX29J42Y"/>

5.   在開發者平臺找到service(這裡附上幾張舊的圖片,僅供參考)

再到Service裡面開啟api功能,尤其是androidapi v2 哪項,否則無法使用申請的key


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


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網頁


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檔案。請注意,google_maps_api.xml 檔案包含有關在您嘗試執行應用前獲取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 金鑰貼上到 google_maps_api.xml 檔案的<string name="google_maps_key “….元素中。清單檔案就不用去寫金鑰了,因為清單檔案就是引用的這裡的,清單檔案中,許可權那些也自動生成了。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

(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 服務的版本。

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>

不新增也不影響程式執行

外部儲存許可權

如果您以 Google Play 服務 SDK 8.3 版或更高版本為目標,使用 Google Maps Android API 時不再需要WRITE_EXTERNAL_STORAGE 許可權。

<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

:如果您的應用的目標平臺是需要使用執行時許可權的API 級別 23 (Android 6.0),則以Google Play 服務 SDK 8.3 或更高版本為目標。

自動合併到清單檔案中的許可權

以下許可權在 Google Play 服務清單檔案中定義,它們會在編譯時自動合併到您的應用的清單檔案中。您需要顯式地將它們新增到清單檔案中:

指定對 OpenGL ES 第 2 版的要求

Google Maps Android API 使用 OpenGLES 第 2 版來渲染地圖。 如果未安裝 OpenGL ES 第 2 版,您的地圖將不會出現。 我們建議您在AndroidManifest.xml 中新增以下 <uses-feature> 元素作為 <manifest> 元素的子元素:

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

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

顯示應用的證書資訊

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

  • 除錯證書:Android SDK 工具會在您執行除錯生成階段時自動生成此證書。此證書只能用於要測試的應用。請勿嘗試釋出使用除錯證書籤署的應用。Android 開發者文件中的在除錯模式下籤署部分詳細介紹了除錯證書。
  • 釋出證書:Android SDK 工具會在您執行版本生成階段時自動生成此證書。您也可以使用 keytool 程式生成此證書。如果您已準備好向外界釋出應用,請使用此證書。
  • 注意:為了保護您的金鑰庫和金鑰,除非您確信計算機的安全性,否則請不要在命令列中輸入 storepasskeypass 引數。例如,在公共計算機上,可能會有人檢視您的終端視窗歷史記錄或正在執行的程式列表、獲取密碼,然後獲得對您的簽署證書的寫入許可權。這樣,他們就能修改您的應用或將其替換為他們自己的應用。
  • com.google.android.geo.API_KEY是建議使用的 API金鑰元資料名稱。可使用具有該名稱的金鑰向 Android平臺上的多個基於 Google Maps API(包括 Google Maps Android API)驗證身份。出於向後相容性上的考慮,該 API 還支援com.google.android.maps.v2.API_KEY名稱。該舊有名稱只允許向 Android Maps API v2驗證身份。應用只能指定其中一個 API金鑰元資料名稱。如果兩個都指定,API會丟擲異常。