Android學習筆記(五七):使用Google Map API v2

來源:互聯網
上載者:User

本筆記將學習如何使用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

Keytool 是一個Java資料認證的管理工具,Keytool將密鑰(key)和認證(certificates)存在一個稱為keystore的檔案中在keystore裡,包含兩種資料:密鑰實 體(Key entity)-密鑰(secret key)或者是私密金鑰和配對公開金鑰(採用非對稱式加密)可信任的認證實體(trusted certificate entries)-只包含公開金鑰.-list             顯示密鑰庫中的認證資訊 keytool -list -v -keystore 指定keystore -storepass 密碼-alias           產生別名 每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫-keystore    指定keystore -file 指定匯出的認證位置及認證名稱-storepass  密碼-keypass     指定密鑰庫的密碼(擷取keystore資訊所需的密碼)

記錄下認證指紋,用它在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"/>

只要在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開發相關文章

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.