使用Google Map API v2
本筆記將學習如何使用Google Map服務。主要參考來源為:https://developers.google.com/maps/documentation/android/start?hl=zh-CN。要在模擬器和實際手機上跑通還是費了一番周折。最新的Google Maps Android API v2已經將map服務合併到Google Play services中,但是國內手機並不提供Google Play store,也不提供Google Play services。國內的手機是否不需要進行CTS測試?換言之,本次學習對於在國內市場提供應用並沒有實際意義,因為你不可能要求使用者去進行額外的安裝,但是將學習手機應用如何使用網際網路服務。要在手機上跑Google地圖服務,涉及的步驟比較多。
一、準備開發環境
1、在Eclipse上安裝Google Play Services SDK。位於extra,見下圖。安裝後位於sdk/extras/google/google_play_services/
2、安裝SDK後,將Make a copy of the Google Play services的lib project拷貝到我們的workspace中,目的是為了在我們的project中可以引入該lib。在Eclise中File -> Import, 選擇Android -> Existing Android Code into Workspace, 在SDK安裝的目錄下,選擇該lib(google-play-services_lib),將其import。
3、要使我們的project可以使用google play service lib,是通用的將library project加入到Android project的操作,目地為了在開發的應用中使用來自lib project的共享程式碼。在Eclipse的包瀏覽(一般位於左側)中,選擇我們的專案,按右鍵-> Properties -> 在左邊屬處選擇Android,在右邊選擇Library -> 在Project
Selection 對話方塊中點選Add -> 從可選的lib project中選擇目標。如下圖
二、準備調測環境
無論採用模擬器還是真實手機作為調測環境,需要確保裝置已經安裝com.android.vending.apk(Google play store)和com.google.android.gms.apk(Google play services),然而模擬器上並沒有包括這兩個包,而國內手機也不包含著兩個apk,這就是為何我在篇首感嘆。要安裝這個兩個需要在網上進行search。需要注意com.google.andriod.gms.apk在2013年5月30有update。由於和Google線上提供的服務相關,這個包必須是最新,才能匹配現有的線上服務。在程式碼中可能進行檢測:
GooglePlayServicesUtil.isGooglePlayServicesAvailable ( getApplicationContext() )
如果返回ConnectionResult: SUCCESS表示可以正常使用。其他可能返回有SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID。下面左圖是SERVICE_MISSING,右圖是SERVICE_VERSION_UPDATE_REQUIRED的情況,都不能正常使用Map業務。上面雖然有兩個button,實際不起作用,估計是無法連線到伺服器導致。據說小米手機的應用商店可以跳轉到Google
Play,可能小米和Google達成某些協議,可能小米手機上沒有什麼問題。
要安裝這個apk時最為麻煩的。最後的解決辦法是先在模擬器上先安裝華為的智匯雲,在上面查詢這兩個應用。由於應用來源不正規,所以不建議在真實手機上安裝。模擬器上安裝apk沒有網上說的那麼複雜,要進入adb shell處理。在模擬器上的瀏覽器直接開啟相關的網頁,下載apk,然後點選進行安裝即可,和手機安裝沒區別。安裝成功後,可以看到App增加了Google Settings和Play Store兩個。
還有一個更為簡單的方法。用gmail帳號登入,然後找到應用下載,在那裡可以下載Google Map,官方版本比較安全。
三、獲取Google Map API的key
要通過Google Map API訪問Google線上的地圖服務,需要Google Map API Key。這個Key獲取是免費的,開發者只要具有Gmail的郵箱就可。所有的Android app都必須由數字證照籤發,開發者持有私有private key。由於數字證照是唯一的,作為應用的唯一標識,這是的應用商店可追蹤你的應用,以及追蹤你應用使用了Google Map服務。
Maps API key是基於應用的數字證照,也成為SHA-1 fingerprint。分為debug證照和release證照,對於我們的試驗,使用debug。debug keystore檔案位於~/.android/,如果是Windows位於C:\Users\your_user_name\.android\。Linux和用下面命令獲得證照。在Windows中-keystore的引數為"C:\Users\your_user_name\.android\debug.keystore"。
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
記錄下證照指紋,用它在Google APIs Console獲取Map Key。Google API Console需要用Google帳號進行登入,也就是我們Gmail的帳號,這個網站貌似不是很穩定,有時請求需要傳送多次才能成功,可能有間歇性攔截,反正多給點耐心吧。
OK,成功獲取我們的Google Map API Key。
四、使用Google Map服務
經過以上步驟,終於將整個開發環境準備好,進入程式碼編寫階段。在coding的具體編寫前,首先要AndroidManifest.xml中設定相應的許可,具體如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wei.android.beginning" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
<!-- 步驟(1)設定Google Map API v2 Key,其中com.wei.android.beginning為package的名字 -->
<permission android:name="com.wei.android.beginning.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<uses-permission android:name="com.wei.android.beginning.permission.MAPS_RECEIVE"/>
<!-- 步驟(3)設定使用Google Map服務所需的許可 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- Google Map是網際網路業務,允許網際網路 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允許API檢查網路連線狀態,已確定是否可以下載資料 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 允許將Google地圖資料快取在SD卡上 -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/><!-- 允許API訪問Google的基於Web的業務 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 地圖應用經常和定位相關,允許粗定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 允許精確定位-->
<!-- 步驟(4)Google Map v2需要OpenGL ES,需要用uses-feature中宣告 -->
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<application ...... >
<!-- 步驟(2)設定Google Map API v2 Key -->
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDPOviDLcwanPb3D3rwdqYXFn8jikGXey0"/>
<activity ......> ...... </activity>
</application>
</manifest>
使用最為簡單的的例子,在Activitiy中簡單的顯示提出。在Activitiy引用的layout.xml檔案如下:
- <?xml version="1.0" encoding="utf-8"?>
- <fragment xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/map"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:name="com.google.android.gms.maps.MapFragment"/>
3.0以下系統應使用SupportMapFragment
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
只要在activity中,將該佈局引入即可。
- public class MainActivity extends Activity {
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- }
費了好大勁,要show一下成果。顯示經度為0,維度為0的地區,請看非洲……
既然有網友問到哪去安裝Google Services,多上幾個圖。左1:沒有安裝Google Services的應用執行情況;左2:通過上文所述的應用商場找到所需,見最下兩個。再現非洲。
相關連結: 我的Android開發相關文章
相關文章
- google map aip使用例子程式GoAI
- Google MapGo
- Google Map 符號Go符號
- Aerospike API操作MapROSAPI
- 使用google map v3新增經緯度資訊Go
- Google Chart APIGoAPI
- google guava的BiMap:雙向MapGoGuava
- Google搜尋API?GoAPI
- Google翻譯的APIGoAPI
- 使用YQL(Google Feed API替代方案)顯示RSS源(2)GoAPI
- 使用google翻譯 api 翻譯中文成其他語言GoAPI
- google api , the problem of null refresh tokenGoAPINull
- google calendar api v3GoAPI
- Google短網址的APIGoAPI
- 諷刺&Google搜尋APIGoAPI
- 新的Google Ajax Search ApiGoAPI
- 【譯(英)】使用AdWords Scripts和Google Prediction API進行機器學習GoAPI機器學習
- 在安卓系統上使用Google Analytics API V4安卓GoAPI
- 利用Google API生成二維碼GoAPI
- 雲原生 API 閘道器,gRPC-Gateway V2 初探APIRPCGateway
- 開始使用DOCKER COMPOSE V2Docker
- 如何使用 SAP UI5 V2 ODataModel 模型 API 實現 deepCreate 的場景以及侷限性UI模型API
- Vue Baidu Map使用VueAI
- Map的使用場景
- 谷歌服務:Google Maps JavaScript API谷歌GoJavaScriptAPI
- Calendar GData API / Google Calendar Connectors deprecationAPIGo
- google books api 獲取圖書資訊GoAPI
- Java map 詳解 - 用法、遍歷、排序、常用API等Java排序API
- JDK9新API:List.of();Map.of();Set.of();JDKAPI
- GPS獲取座標 顯示Google map偏差計算Go
- 分析顯示 Google Map 繼續領先競爭對手Go
- 亞馬遜廣告擴充套件 API v2 easy-Amazon-advertising 文件亞馬遜套件API
- Kinect V2 開發專題(2)專案配置與API概況API
- Chromium 提示:缺少 Google API 金鑰,因此 Chromium 的部分功能將無法使用GoAPI
- Google API設計指南-資源名稱GoAPI
- google api , using a refresh token to get the access tokenGoAPI
- STL的map使用和分析
- vue中使用echart的mapVue