Pages

Subscribe:

Ads 468x60px

Labels

2013年5月20日 星期一

Google Maps Android API V2使用及問題解決


因為Google Maps的API版本更新,之前的一些教程都是關於舊版本V1的,雖然Google說繼續提供服務,但是不再提供API Key的申請。

而新的V2版本貌似改動還挺大。也沒搜到國內有什麼系統介紹的博客文章之類的(書肯定是來不及那麼新了)。

斷斷續續折騰了大概半個月,因為對Android也不是特別熟悉,所以碰到這樣那樣的問題。

終於在昨天看見模擬器上跑的地圖了。太感人了。

下面就主要說說要成功做成這一件事的流程吧。

因為肯定有時效性,所以打上一個時間戳記:版本更新事件發生在2012年12月,而這篇博文目前的時間是2013年1月1日。

背景
一些相關的連結:

Google Maps Android API V1的介紹:

HTTPs://developers.google.com/maps/documentation/android/v1/mapkey?hl=zh-CN

Google Maps Android API v2的初步介紹:

HTTPs://developers.google.com/maps/documentation/android/

Introduction
HTTPs://developers.google.com/maps/documentation/android/intro

Getting Started
(本部分參考HTTPs://developers.google.com/maps/documentation/android/start)

1.首先安裝Google Play services SDK
Google Maps Android API是作為這個SDK的一部分發行的。

這個安裝是通過Android SDK Manager進行,配置好之後的Eclipse上面應該有Android SDK Manager的圖示,一般的SDK版本安裝和更新都在這裡進行。

安裝和更新Extras下的Google Play services即可。

2.獲取API key
獲取Maps API key需要兩樣東西:應用的signing certificate和它的package name。

獲取這個key之後,把它加在應用程式的AndroidManifest.xml檔裡即可。

為應用獲取一個key還是需要好幾個步驟的,下面詳細說明:

獲取數位憑證(digital certificate)資訊
數位憑證有Debug和Release兩種,下面主要說Debug的。

要獲取一個叫做SHA-1 fingerprint的東西,作為數位憑證的一個簡短代表。

這個指紋(fingerprint)是通過一個雜湊演算法得到的字串,為了得到你的證書的SHA-1 fingerprint,首先要找到你的debug keystore 檔,檔案名叫debug.keystore。

預設情況下它和虛擬機器AVD存放在一起,win7下的路徑是:C:\Users\your_user_name\.android\,也可以通過Eclipse中的Windows > Prefs > Android > Build來查看這個路徑。

然後,在cmd命令列裡運行下列命令:

keytool -list -v -keystore "C:\Users\your_user_name\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android就顯示一大堆東西,其中就有證書指紋:
1744520  


SHA1那一行就包含了證書的SHA-1 fingerprint,是二十段用冒號割開的數位段,每段是兩個十六進位的數。

在Google APIs Console上創建API Project
在Google APIs Console上創建專案,並且註冊Maps API。

首先,去這個網址:HTTPs://code.google.com/apis/console/
 
用Gmail的帳戶登錄,如果是第一次的話,需要創建專案,預設情況會創建一個叫做API Project的專案。

點擊左邊的Services,會在中間看到很多的APIs和Services,找到Google Maps Android API v2,然後把它設置成on,需要接受一些服務條款。

獲得API Key
在左邊的導航條中選擇API Access。

在出來的頁面中選擇Create New Android Key...就可以生成key了:
1744521  


然後在對話方塊中填入:SHA-1 指紋, 分號隔開,然後是應用的 package name.然後就會生成一個Key。

比如:
1744522  


3.把API Key加入應用程式
首先,建立虛擬裝置AVD和應用程式。

關於AVD,官方文檔並沒詳細介紹,我後面會有說明。

建立好應用程式,注意包名應該和申請key時候的包名一致。

之後修改AndroidManifest.xml檔:

3.1.在元素中加入子標籤

3.2.加入一些許可資訊

com.example.mapdemo.permission.MAPS_RECEIVE"/> 其中com.example.mapdemo換成自己的包名。


4. AndroidManifest.xml中的其他具體設置

許可設置

作為 的子項目,需要加入下列一些:

android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> OpenGL ES V2特性支援

同樣也是作為 的子項目。

5.加上地圖
首先佈局檔:

parent" android:layout_height="match_parent" class="com.google.android.gms.maps.MapFragment"/> 然後在MainActivity.java:

MainActivity.java package com.example.mapdemo; import android.app.Activity;import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 遇到的問題和解決的方法
程式編譯錯誤,顯示找不到一些類
如圖:

1744523  

解決這個問題,首先需要把Google Play services的類庫載入進來:

在Eclipse裡面選擇:File > Import > Android > Existing Android Code Into Workspace然後點擊Next.

之後Browse..., 找到路徑下的/extras/google/google_play_services /libproject/google-play-services_lib, 然後選擇Finish。

第二步是添加對這個庫的引用:

在自己的專案上右鍵,選Properties,左邊選Android,然後在下面的Library裡面Add剛才的google-play-services_lib。

1744524  

之後程式就應該能運行了。

接著你可能會碰到下面的問題:

程式運行成功,但是顯示This app won't run unless you update Google Play services.

如圖:
1744525  


有傳言說V2不能在AVD上運行,可能Google還會對此問題進行更新。

經過搜索,這個問題已經在Stackoverflow上被討論過了,連結

所以看來在AVD上運行的問題已經被解決了。

解決的方法就是在AVD上安裝兩個包:vending.apk和gms.apk,(給一個網盤連結

並且AVD就選擇普通的API 16就行,不需要是Google APIs。我選的是Android4.1 API16.

安裝時把那兩個包放在目前的目錄,用命令列安裝:

1744526  

之後運行程式,就出地圖了:
1744527  

沒有留言:

張貼留言