Android调用Google Map

Google为android的开发者提供了一套相当完善的地图应用接口,开发者可以很方便的使用这些接口来做一些LBS应用程序。 

我所使用的开发环境是eclipse,另外再用ADT工具安装Google Maps library组件(这个库是Google APIs add-on的一部分,要确保开发环境里已经安装了这个库)。 

具体调用 google map 的流程为:网上申请Maps API Key=>创建一个MapActivity=>在地图上添加自定义图层 

一.如何获得Maps API Key?

1.在命令行里用keytool命令生成一个MD5 certificate fingerprint 

$ keytool -list -alias alias_name -keystore my-release-key.keystore

 

根据提示输入密码等信息,然后可以得到如下MD5 certificate fingerprint   

Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98

只有获得了这个MD5 certificate fingerprint才可以在注册页面获取key.

 

2.注册Maps API Key

打开http://code.google. com/android/maps-api-signup.html 

 

在这个页面输入你的MD5 certificate fingerprint就可以获取Maps API Key.这里我们得到的key为   

08dkmLW5o********PgzGDxT9mb1JKOoV3Rhrlw

 

二、创建一个MapActivity

1.在eclipse中创建一个名字为HelloGoogleMaps的android工程。因为我们要调用地图API,所以在选择Build Target的时候一定要选择Google APIs。

2.编辑XML文件。

mail.xml 

[xhtml]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <com.google.android.maps.MapView  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:id="@+id/mapview"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent"  
  7.     android:clickable="true"  
  8.     android:apiKey="08dkmLW5o********PgzGDxT9mb1JKOoV3Rhrlw"  
  9. />  
  

android:apiKey即是我们刚才申请得到的Maps Key,这里一定不能出错,否则可能会无法得到map tiles。

3.修改AndroidManifest.xml

[xhtml]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.HelloGoogleMaps"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.         
  7.     <uses-permission android:name="android.permission.INTERNET" />  
  8.           
  9.     <application android:icon="@drawable/icon" android:label="@string/app_name">   
  10.         <activity android:name=".HelloGoogleMaps"    
  11.                   android:theme="@android:style/Theme.NoTitleBar"  
  12.                   android:label="@string/app_name">  
  13.             <intent-filter>  
  14.                 <action android:name="android.intent.action.MAIN" />  
  15.                 <category android:name="android.intent.category.LAUNCHER" />  
  16.             </intent-filter>  
  17.         </activity>  
  18.         <uses-library android:name="com.google.android.maps" />  
  19.     </application>   
  20.   
  21.     <uses-sdk android:minSdkVersion="8" />  
  22.   
  23. </manifest>   

 

因为map tiles来自于google map server,所以我们需要加上

<uses-permission android:name="android.permission.INTERNET" /> 让application可以访问internet.

另外再application标签下面需要添加<uses-library android:name="com.google.android.maps" /> 指明我们要用到google map的library。

4.创建一个继承自MapActivity的类。

[java]  view plain copy
  1. package com.HelloGoogleMaps;  
  2.   
  3. import android.os.Bundle;  
  4. import com.google.android.maps.MapActivity;  
  5. import com.google.android.maps.MapView;  
  6.   
  7. public class HelloGoogleMaps extends MapActivity {  
  8.     /** Called when the activity is first created. */  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.           
  14.         MapView mapView = (MapView) findViewById(R.id.mapview);  
  15.         mapView.setBuiltInZoomControls(true);  
  16.     }  
  17.   
  18.     @Override  
  19.     protected boolean isRouteDisplayed() {  
  20.         // TODO Auto-generated method stub  
  21.         return false;  
  22.     }  
  23. }  

完成了以上步骤,运行程序就可以看到自己的activity可以显示google map了。

 

三、添加自定义图层

我们调用google map的目的是为了在map上面显示自己想显示的内容,比如显示用户当前的位置(需要调用GPS) ,或是将某一个兴趣点(Point Of Interest)在地图上显示出来等。这样就需要在google map上面添加自定义的图层了。 

1.创建一个继承自ItemizedOverlay的class 

[java]  view plain copy
  1. import java.util.ArrayList;  
  2.   
  3. import android.app.AlertDialog;  
  4. import android.content.Context;  
  5. import android.graphics.drawable.Drawable;  
  6.   
  7. import com.google.android.maps.ItemizedOverlay;  
  8. import com.google.android.maps.OverlayItem;  
  9.   
  10. public class ZPoiItem extends ItemizedOverlay {  
  11.       
  12.     private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();  
  13.     private Context mContext;  
  14.       
  15.     public ZPoiItem(Drawable defaultMarker) {  
  16.         super(boundCenterBottom(defaultMarker));  
  17.     }  
  18.     public ZPoiItem(Drawable defaultMarker, Context context) {  
  19.         super(defaultMarker);  
  20.         mContext = context;  
  21.     }  
  22.       
  23.     public void addOverlay(OverlayItem overlay) {  
  24.         mOverlays.add(overlay);  
  25.         populate();  
  26.     }  
  27.       
  28.     @Override  
  29.     protected OverlayItem createItem(int i) {  
  30.         // TODO Auto-generated method stub  
  31.         return mOverlays.get(i);  
  32.   
  33.     }  
  34.   
  35.     @Override  
  36.     public int size() {  
  37.         // TODO Auto-generated method stub  
  38.         return mOverlays.size();  
  39.     }  
  40.   
  41.     @Override  
  42.     protected boolean onTap(int index) {  
  43. //    OverlayItem item = mOverlays.get(0);//OverlayItem item = mOverlays.get(index);  
  44. //    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);  
  45. //    dialog.setTitle(item.getTitle());  
  46. //    dialog.setMessage(item.getSnippet());  
  47. //    dialog.show();  
  48.       return true;  
  49.     }  
  50. }  

 

创建好了ZPoiItem类,回到HelloGoogleMaps类,添加变量

[java]  view plain copy
  1. private MapController mMapController  

该变量用于控制地图的,比如设置地图中心点,设置地图比例尺等。

然后在onCreate函数的末尾添加如下代码:

[java]  view plain copy
  1. mMapController = mapView.getController();  
  2.   
  3. List<Overlay> mapOverlays = mapView.getOverlays();  
  4.         Drawable drawable = this.getResources().getDrawable(R.drawable.star_big_on);//star_big_on is an icon id.  
  5.         ZPoiItem itemizedoverlay = new ZPoiItem(drawable);  
  6.   
  7.         GeoPoint point = new GeoPoint(1288515,103853388); //a poi in Singapore      
  8.         mMapController.setCenter(point);//set map center   
  9.         mMapController.setZoom(12);//set map scale  
  10.         mMapController.animateTo(point);  
  11.           
  12.         OverlayItem overlayitem = new OverlayItem(KeywordSearchResultActivity.mSelPoint, "Hola, Mundo!""I'm in Mexico City!");  
  13.         itemizedoverlay.addOverlay(overlayitem);  
  14.         mapOverlays.add(itemizedoverlay);  

 

至此已完成了在google map上添加自定义图层。效果图如下:

 

 

后记:值得一提的是,android的map软件需要签名以后才能发布给其他手机,这个签名过程用eclipse的GUI可以很方便的完成,右键工程根目录选择Android Tools->Export signed application package...,进入签名设置界面,根据提示一步步完成签名。用签好名的.apk安装到手机里可以看到如上所示的结果。Google map的API非常丰富,开发者可以利用这些函数接口编写各种各样的LBS软件或是其他基于地图的应用软件。Foursuqare就是一个不错的调用google map的LBS软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值