近日如果在Android開發Google Map應用程式時會發現到為何坊間的書籍資料裡面的方法已經無法使用,然後就......
其實,2012年12月3日Google聲明淘汰掉 Google Maps Android API Version 1版本,同時並推出 Google Maps Android API v2版。
首當其衝的就是申請Map API Key,使用v1版本方式開發Map程式申請API Key到今年3月18日止就不再受理,但如果已經申請到的v1 API Key則可以沿用下去。
其次影響到的就是在Android開發Map程式方法,新版開發的方式變得比較複雜許多,所以本篇整理一下如何使用Google Maps Android API v2在Android上開發Google 程式。
Google Maps Android API v2的官方網址為:https://developers.google.com/maps/documentation/android/ 。其中說明到:
1. API需要配合Google Play Services 。Google Play services APK是Android系統中的一個背景服務,該服務提供了授權流程用來獲得Google的各項服務。詳見 Google Play Services 。
2. 地圖封裝在 MapFragment 類別中。
3. 由於地圖封裝在 MapFragment 類別中,你可以延伸標準的 Activity,而不是切換 MapActivity。
4.使用vector tiles技術可以使地圖顯示得更快,頻寬使用的更少。
5.Caching 比較少,所以看到的地圖空白區域會更少。
6.可以顯示3D及透視(室內)地圖。
另外需要注意的地方是在 Introduction to the Google Maps Android API v2官網 中有個Attribution Requirements項目,這部分要求在寫App程式中如果有使用到 Google Maps Android API你比需要寫一個Menu或是在"關於"內容中法律聲明。
實作環境:
Win7 SP1 / Win8專業版
Java 1.6.0_37
Eclipse 3.7.2
ADT 21.1.0
asus nexus 7 (android 4.2.2)
以下是實作步驟:
開發環境初始設定:
1. 打開SDK中的SDK Manager,找到Extras並安裝Android Support Library及 Google Play Services兩個項目。
2. 打開Eclipse匯入Google Play Services函式庫。
開啟 File --> Import --> Android --> Existing Android Code Into Workspace --> Next
接著用Browse選擇上一個步驟所安裝的Google Play Services函式庫路徑: "路徑\android-sdk-windows\extras\google\google_play_services\libproject\google-play-services_lib"
這時你會看到中間 Project裡面有個新的專案名稱為google-play-services_lib
如果你要將這個函式庫拷貝到Eclipse的Workspace的話就將 copy project into workspace打勾
接著按下Finish
3.這時你可能會看到在Eclipse Console 出現Unable to resolve target 'android-8',解決的方法是在該專案名稱前按下滑鼠右鍵-->Properties-->Android 在Project Build Target勾選你有安裝的項目。
這樣就完成匯入Google Play Services函式庫了。google-play-services_lib這個函式庫我們不用修改任何地方,只要將該專案Open,然後讓你的程式當成Library去呼叫使用。
申請 Map API Key:
1. 首先必須要申請一個Google帳號,然後到 Google APIs Console 網頁按下 Create project... 建立一個專案。
2.接著選擇畫面左邊的 Services 找到Google Maps Android API v2項目並將右邊的開關選項ON起來。
3. 接著打開Windows 的命令列,輸入: keytool -list -v -keystore "C:\Users\用戶名稱\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android 指令取得 Key
其中,debug.keystore所在位置查詢方法: 打開Eclipse --> Windows --> Preferences --> Android -->Build 在這個畫面中的 Default debug keystore項目中可以查到路徑。
4.上圖中,我們將SHA1:後面的一串字碼拷貝起來。然後到 Google APIs Console 網頁選擇左邊的API Access項目,接著選擇 Create new Android key...
接著會彈跳出一個 Configure Android Key for API Project的畫面,我們將剛剛複製的SHA1:後面的一串字碼貼在中間的框框內,然後輸入分號";"後面接著要開發的Android App專案名稱。
接著按下 Create 後Google APIs Console 頁面會多出個 Android專用的 API key。
此時,我們記下這組API key,讓接下來所要寫的程式使用它。
撰寫程式:
1. 開啟新專案:
其中需要注意的是 Package Name需跟前面申請的名稱一樣。
2.將前面所述的google-play-services_lib加入到函式庫中,在專案剛建立的專案名稱按下滑鼠右鍵-->Properties-->Android 在 Library 按下 Add 選擇 google-play-services_lib 然後按下OK,接著確認Library框框中的勾勾是綠色的。
3.開啟AndroidManifest.xml 首先加入權限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
接著如果使用OpenGL ES version 2來顯示在 中加入:
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
然後在 </application>上面輸入API key:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="輸入你所申請到的API Key" />
4. 開啟 res --> layout 中的 main.xml 定義一個名稱為map的MapFragment。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
</RelativeLayout>
5. 開啟 MainActivity 程式內容如下:
package edu.nkut.hellomap;
import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends Activity {
static final LatLng NKUT = new LatLng(23.979548, 120.696745);
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
Marker nkut = map.addMarker(new MarkerOptions().position(NKUT).title("南開科技大學").snippet("數位生活創意系"));
// Move the camera instantly to NKUT with a zoom of 16.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(NKUT, 16));
}
}
執行結果:
執行結果必須在實際Android設備上執行,至目前為止 模擬器上無法執行 是正常的,主要是因為模擬器上並沒有Google Play商店、Google Play服務及地圖。
後記:
使用Google Maps Android API v2開發Android地圖應用程式確實比起v1版本多了些許步驟,加上使用了 MapFragment 類別看來還得要花點時間來適應新的寫法。
在 "路徑\android-sdk-windows\extras\google\google_play_services\samples\maps"中有官方所提供的範例可以參考,不過同樣確認的是不能再模擬器上面執行。
========= 04/30 補充說明 =========
如果使用SDK模擬器執行Google Maps Android API v2請參考友站(南開另一位老師經營):
Android程式設計 - 使用模擬器測試Google Maps API v2
執行結果:
========= 05/15 補充說明 =========
Android 4.X App開發教戰手冊修訂2版 作者:黃彬華 的教學。該YouTube有六個教學:
http://www.youtube.com/watch?v=nDnG3OiazXI&list=PLst_JE7uVIPUYE2EMG_8eboNgr4rX9WXg
參考:
1.Google Maps Android API v2
https://developers.google.com/maps/documentation/android/
2. Google Play Services
http://developer.android.com/google/play-services/index.html
3.Introduction to the Google Maps Android API v2
https://developers.google.com/maps/documentation/android/intro
4.Google APIs Console
https://code.google.com/apis/console/
5.keytool
http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html
6.Getting Started
https://developers.google.com/maps/documentation/android/start#installing_the_google_maps_android_v2_api
7.Android程式設計 - 使用模擬器測試Google Maps API v2
http://nkeegamedev.blogspot.tw/2012/12/android-google-maps-api-v2.html
转载地址:http://cheng-min-i-taiwan.blogspot.com/2013/04/google-maps-android-api-v2-android.html