Android開發如何利用Google map

來源:互聯網
上載者:User

自google 06年進入中國,在地圖、移動領域的發展速度基本上都是每年幾倍的增長。在最新的Android平台開發相關應用程式,如果能深入瞭解google map 將會對我們Android開發提供很大的協助.以下是我總結的在Android開發中對google map的理解。
1. 首先先要擷取你的debug keystore位置:
開啟Eclipse--->Windows---> preferences--->Android--->Build
查看預設的debug keystore位置,我的是C:/Documents and Settings/sdhbk/.android/debug.keystore
2.在CMD下定位到Java的安裝目錄的bin目錄下,鍵入以下命令:
keytool -list -alias androiddebugkey -keysto
re "C:/Documents and Settings/sdhbk/.android/debug.keystore" -storepass android
-keypass android
androiddebugkey, 2009-7-25, PrivateKeyEntry,
認證指紋 (MD5): DA:D5:6E:C2:80:D1:0F:0D:F8:2A:58:6A:74:7C:CE:2D
3.
開啟http://code.google.com/intl/zh-CN/android/maps-api-signup.html
填入你的認證指紋(MD5)即可獲得apiKey了,結果顯示如下:
感謝您註冊 Android 地圖 API 金鑰!
您的密鑰是:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4. 使用得到的apiKey:
在layout中加入MapView

或者

5.Android在sdk1.5的預裝的add-on中提供了一個Map擴充庫com.google.android.maps,利用它你就可以給你的android應用程式增加上強大的地圖功能了。這個庫的位置在Your-SDK_DIR/add-ons/google_apis-3 /libs.
一定要在manifest.xml中設定全相應的許可權,比如:

要在manifest.xml中加上要用的maps庫:

...

...
...

需要說明的是這個庫不是標準的android sdk的內容,你也可以自己從這裡這裡下載並放到你的sdk裡面。
Maps庫分析

Maps庫提供了十幾個類,具體可以參考這裡http://code.google.com/intl/ja/android/add-ons/google-apis/reference/index.html, 包括Mapview,MapController,MapActivity等。
Mapview是用來顯示地圖的view, 它也是派生自android.view.ViewGroup。
地圖可以以不同的形式來顯示出來,如街景模式,衛星模式等,具體方法可以參考:
setSatellite(boolean), setTraffic(boolean), and setStreetView(boolean)
MapView只能被MapActivity來建立,這是因為mapview需要通過背景線程來串連網路或者檔案系統,而這些線程要由mapActivity來管理。

需要特別說明的一點是,android 1.5中,map的zoom採用了built-in機制,可以通過setBuiltInZoomControls(boolean)來設定是否在地圖上顯示zoom控制項。

MapActivity是一個抽象類別,任何想要顯示MapView的activity都需要派生自MapActivity。並且在其衍生類別的 onCreate()中,都要建立一個MapView執行個體,可以通過MapView constructor (then add it to a layout View with ViewGroup.addView(View)) 或者通過layout XML來建立。
執行個體分析

最後,按照慣例,還是用一個小程式來示範一下android中地圖功能的開發。主要功能是實現了地圖的縮放,添加了菜單,從而可以手動選擇地圖的顯示模式等。
Step 1: 建立一個android project, 注意這裡要選擇的build target為"Google APIs"

Step 2: 修改menifest檔案:

Step 3: 修改layout檔案,main.xml

這裡需要將api key中的????????????改成你自己申請到的api key.

Step 4: 修改代碼:
package com.map.prac;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
public class MapViewPrac2 extends MapActivity {
private final String TAG = "MapPrac";
private MapView mapView = null;
private MapController mc;
//Menu items
final private int menuMode = Menu.FIRST;
final private int menuExit = Menu.FIRST+1;
final private int menuCommandList = Menu.FIRST + 2;
private int chooseItem = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.map);
mc = mapView.getController();
mapView.setTraffic(true); //
mapView.setSatellite(false);
mapView.setStreetView(true);
//GeoPoint gp = new GeoPoint((int)(39.269259 * 1000000), (int)(115.255762 * 1000000));//yixian
GeoPoint gp = new GeoPoint((int)(39.95 * 1000000), (int)(116.37 * 1000000));//beijing
//mc.animateTo(gp);
//mc.setZoom(12);
mc.setCenter(gp);
//to display zoom control in MapView
mapView.setBuiltInZoomControls(true);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.i(TAG,"enter onKeyDown");
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, menuMode, 0, "Map Mode");
menu.add(0, menuCommandList, 1, "Command List");
menu.add(0, menuExit, 2, "Exit");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId())
{
case menuMode:
Dialog dMode = new AlertDialog.Builder(this)
//.setIcon(R.drawable.alert_dialog_icon)
.setTitle(R.string.alert_dialog_single_choice)
.setSingleChoiceItems(R.array.select_dialog_items2, chooseItem, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Log.i(TAG, "choose button is "+ whichButton);
chooseItem = whichButton;
/* User clicked on a radio button do some stuff */
}
})
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked Yes so do some stuff */
Log.i(TAG,"item = "+chooseItem);
switch(chooseItem)
{
case 0:
mapView.setSatellite(false);
break;
case 1:
mapView.setSatellite(true);
break;
case 2:
mapView.setTraffic(true);
break;
case 3:
mapView.setStreetView(true);
break;
default:
break;
}
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked No so do some stuff */
}
})
.create();
dMode.show();
break;
case menuCommandList:
//create the dialog
Dialog d = new AlertDialog.Builder(this)
.setTitle(R.string.select_dialog)
.setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
/* User clicked so do some stuff */
String[] items = getResources().getStringArray(R.array.select_dialog_items);
/*new AlertDialog.Builder(this)
.setMessage("You selected: " + which + " , " + items[which])
.show();*/
Log.i(TAG,"you choose is: " + items[which]);
}
})
.create();
//show the dialog
d.show();
break;
case menuExit:
finish();
break;
default:
break;
}
return super.onMenuItemSelected(featureId, item);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
關於google map的用法還有待各位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.