Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android系統Google Maps開發實例淺析

Android系統Google Maps開發實例淺析

編輯:Android開發實例

       Google Map(谷歌地圖)是Google公司提供的電子地圖服務。包括了三種視圖:矢量地圖、衛星圖片、地形地圖。對於Android系統來說,可以利用Google提供的地圖服務來開發自己的一些應用。Google Map的服務體現在兩個方面:地圖API和位置API。使用Android Maps API(地圖API)和Android Location API(定位API)可以輕松實現實用而且強大的功能。

       我的位置:“我的位置”在地圖上顯示你的當前位置(通常在 1000 米范圍之內)。即使沒有 GPS,你也可以確定自己的位置。谷歌手機地圖還支持內置 GPS,也可以鏈接到藍牙GPS 傳感器,以便更准確地確定用戶的位置。“我的位置”功能是通過識別你附近無線發射塔的信息廣播而確定你的位置的。

       地圖和衛星視圖:谷歌手機地圖向你提供所查看地區的地圖和衛星視圖,其界面的使用感覺與你在台式機上相同。 可沿其中一個方向滾動,以查看地圖上的更多內容;或使用快捷鍵進行縮放。

       商戶列表:借助於Google 的本地搜索引擎,可以按名稱(如“星巴克”)或類型(如“咖啡”)搜索商家,查看商店的營業時間和評分,然後,只需點擊一下即可撥通感興趣的商家的電話。有了“我的位置”功能,甚至都不需要輸入當前位置即可方便地找到附近的商家。

       駕車路線:可以很方便地獲得駕車路線,其中會清楚地標明每次轉彎。有了“我的位置”功能,甚至都不需要輸入出發點。

       公交換乘:查看公交和地鐵線路,確定轉車路線,制定你在全球 80 多個城市的出行計劃。“公交換乘”功能目前適用於黑莓、Windows Mobile、S60 和其他支持 Java 的手機。

       路況信息:Google 地圖中的公路會根據實時路況數據,以綠色、黃色或紅色顯示。

       收藏夾:為你常去的地方加上書簽,以便能在地圖上非常方便地返回到這些地方。

 Android系統Google Maps開發實例淺析

       1. 首先先要獲取你的debug keystore位置:

       打開Eclipse--->Windows---> preferences--->Android--->Build

       查看默認的debug keystore位置,我的是C:\Documents and Settings\sdhbk\.android\debug.keystore

       2.

       D:\android-sdk-windows-1.5_r1\tools>keytool -list -alias androiddebugkey -keystore "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

XML/HTML代碼
  1. <com.google.android.maps.MapView  
  2. android:id="@+id/mapview"  
  3. android:layout_width="fill_parent"  
  4. android:layout_height="fill_parent"  
  5. android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g" />  

       或者

XML/HTML代碼
  1. <view android:id="@+id/mv"  
  2. class="com.google.android.maps.MapView"  
  3. android:layout_width="fill_parent"  
  4. android:layout_height="fill_parent"  
  5. android:layout_weight="1"  
  6. android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"  
  7. />  

       5.Android在sdk1.5的預裝的add-on中提供了一個Map擴展庫com.google.android.maps,利用它你就可以 給你的android應用程序增加上強大的地圖功能了。這個庫的位置在Your-SDK_DIR\add-ons\google_apis-3 \libs.

       一定要在manifest.xml中設置全相應的權限,比如:

       <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
       <uses-permission android:name="android.permission.INTERNET" />

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

XML/HTML代碼
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2. package="com.example.package.name">  
  3. ...   
  4. <application android:name="MyApplication" >  
  5. <uses-library android:name="com.google.android.maps" />  
  6. ...   
  7. </application>  
  8. ...   
  9. </manifest>  

       需要說明的是這個庫不是標准的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來創建。

       Google Maps實例分析

       最後,按照慣例,還是用一個小程序來演示一下android中地圖功能的開發。主要功能是實現了地圖的縮放,添加了菜單,從而可以手動選擇地圖的顯示模式等。

       Step 1: 新建一個android project, 注意這裡要選擇的build target為"Google APIs"。

       Step 2: 修改menifest文件:

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3. package="com.map.prac"  
  4. android:versionCode="1"  
  5. android:versionName="1.0">  
  6. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  7. <uses-permission android:name="android.permission.INTERNET" />  
  8. <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9. <uses-library android:name="com.google.android.maps" />  
  10. <activity android:name=".MapViewPrac2"  
  11. android:label="@string/app_name">  
  12. <intent-filter>  
  13. <action android:name="android.intent.action.MAIN" />  
  14. <category android:name="android.intent.category.LAUNCHER" />  
  15. </intent-filter>  
  16. </activity>  
  17. </application>  
  18. <uses-sdk android:minSdkVersion="3" />  
  19. </manifest>  

       Step 3: 修改layout文件,main.xml

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:id="@+id/main"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent">  
  6. <com.google.android.maps.MapView  
  7. android:id="@+id/map"  
  8. android:layout_width="fill_parent"  
  9. android:layout_height="fill_parent"  
  10. android:enabled="true"  
  11. android:clickable="true"  
  12. android:apiKey="???????????????????????????????????"  
  13. />  
  14. </LinearLayout>  

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

       Step 4: 修改代碼:

Java代碼
  1. package com.map.prac;   
  2. import com.google.android.maps.GeoPoint;   
  3. import com.google.android.maps.MapActivity;   
  4. import com.google.android.maps.MapController;   
  5. import com.google.android.maps.MapView;   
  6. import android.app.AlertDialog;   
  7. import android.app.Dialog;   
  8. import android.content.DialogInterface;   
  9. import android.os.Bundle;   
  10. import android.util.Log;   
  11. import android.view.KeyEvent;   
  12. import android.view.Menu;   
  13. import android.view.MenuItem;   
  14. public class MapViewPrac2 extends MapActivity {   
  15. private final String TAG = "MapPrac";   
  16. private MapView mapView = null;   
  17. private MapController mc;   
  18. //Menu items   
  19. final private int menuMode = Menu.FIRST;   
  20. final private int menuExit = Menu.FIRST+1;   
  21. final private int menuCommandList = Menu.FIRST + 2;   
  22. private int chooseItem = 0;   
  23.   
  24. @Override  
  25. public void onCreate(Bundle savedInstanceState) {   
  26. super.onCreate(savedInstanceState);   
  27. setContentView(R.layout.main);   
  28. mapView = (MapView)findViewById(R.id.map);   
  29. mc = mapView.getController();   
  30. mapView.setTraffic(true); //   
  31. mapView.setSatellite(false);   
  32. mapView.setStreetView(true);   
  33. //GeoPoint gp = new GeoPoint((int)(39.269259 * 1000000), (int)(115.255762 * 1000000));//yixian   
  34. GeoPoint gp = new GeoPoint((int)(39.95 * 1000000), (int)(116.37 * 1000000));//beijing   
  35. //mc.animateTo(gp);   
  36. //mc.setZoom(12);   
  37. mc.setCenter(gp);   
  38. //to display zoom control in MapView   
  39. mapView.setBuiltInZoomControls(true);   
  40. }   
  41. @Override  
  42. public boolean onKeyDown(int keyCode, KeyEvent event) {   
  43. // TODO Auto-generated method stub   
  44. Log.i(TAG,"enter onKeyDown");   
  45. return super.onKeyDown(keyCode, event);   
  46. }   
  47. @Override  
  48. public boolean onCreateOptionsMenu(Menu menu) {   
  49. menu.add(0, menuMode, 0, "Map Mode");   
  50. menu.add(0, menuCommandList, 1, "Command List");   
  51. menu.add(0, menuExit, 2, "Exit");   
  52. return super.onCreateOptionsMenu(menu);   
  53. }   
  54. @Override  
  55. public boolean onMenuItemSelected(int featureId, MenuItem item) {   
  56. // TODO Auto-generated method stub   
  57. switch(item.getItemId())   
  58. {   
  59. case menuMode:   
  60. Dialog dMode = new AlertDialog.Builder(this)   
  61. //.setIcon(R.drawable.alert_dialog_icon)   
  62. .setTitle(R.string.alert_dialog_single_choice)   
  63. .setSingleChoiceItems(R.array.select_dialog_items2, chooseItem, new DialogInterface.OnClickListener() {   
  64. public void onClick(DialogInterface dialog, int whichButton) {   
  65. Log.i(TAG, "choose button is "+ whichButton);   
  66. chooseItem = whichButton;   
  67.   
  68. }   
  69. })   
  70. .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {   
  71. public void onClick(DialogInterface dialog, int whichButton) {   
  72.   
  73. Log.i(TAG,"item = "+chooseItem);   
  74. switch(chooseItem)   
  75. {   
  76. case 0:   
  77. mapView.setSatellite(false);   
  78. break;   
  79. case 1:   
  80. mapView.setSatellite(true);   
  81. break;   
  82. case 2:   
  83. mapView.setTraffic(true);   
  84. break;   
  85. case 3:   
  86. mapView.setStreetView(true);   
  87. break;   
  88. default:   
  89. break;   
  90. }   
  91. }   
  92. })   
  93. .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {   
  94. public void onClick(DialogInterface dialog, int whichButton) {   
  95.   
  96. }   
  97. })   
  98. .create();   
  99. dMode.show();   
  100. break;   
  101. case menuCommandList:   
  102. //create the dialog   
  103. Dialog d = new AlertDialog.Builder(this)   
  104. .setTitle(R.string.select_dialog)   
  105. .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {   
  106. public void onClick(DialogInterface dialog, int which) {   
  107.   
  108. String[] items = getResources().getStringArray(R.array.select_dialog_items);   
  109.   
  110. Log.i(TAG,"you choose is: " + items[which]);   
  111. }   
  112. })   
  113. .create();   
  114. //show the dialog   
  115. d.show();   
  116. break;   
  117. case menuExit:   
  118. finish();   
  119. break;   
  120. default:   
  121. break;   
  122. }   
  123. return super.onMenuItemSelected(featureId, item);   
  124. }   
  125. @Override  
  126. protected boolean isRouteDisplayed() {   
  127. // TODO Auto-generated method stub   
  128. return false;   
  129. }   
  130. }  

       關於google map的用法還有待各位Android開發人員在實際開發中的總結!

轉自:無線時代

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved