分享

Android中配置和使用Google Map服务

 My镜像站 2012-01-19

Android提供了对地图服务强有力的支持,开发一款基于地图服务的软件也因此变得容易了许多,今天就和大家分享一下如何在Android中配置和使用Google Map服务。

首先我们需要找到调试证书,它由Eclipse生成和维护。点击Eclipse中的Window=>Preferences,然后找到Android=>Build项,如图:

被鼠标选中的路径就是开发时默认的调试证书文件。我们在下面要用到此路径。

然后我们需要使用Android提供的keytool命令获取指定调试证书所对应的MD5指纹码:

  1. keytool -list -alias androiddebugkey -keystore "C:/Users/user/.android/debug.keystore" -storepass android -keypass android  

需要注意的是,调试储存库的alias为“androiddebugkey”,密钥库密码为“android”,私钥密码也为“android”。

使用以上命令,我们就可以获取MD5指纹码了。如图所示:

拿到了MD5指纹码之后,我们需要到向google请求map-api密钥。我们需要在浏览器中输入以下地址:

http://code.google.com/intl/zh-CN/android/maps-api-signup.html

然后输入刚才我们获取到的MD5指纹码。如图所示:

如果我们没有登录google账户的话,它会提示我们先登录google账户。

最后,如果响应页面如图,就代表申请成功了:

android:apiKey就是我们申请到的map-api密钥。

完成了这些步骤之后,我们就能开发自己的应用程序了。

首先我们需要新建一个项目,在建立项目的过程中,Build Target一定要选择“Google APIs”这一项,如图:

项目结构如图所示:

这个示例主要完成以下功能:显示地图界面;定位天安门并显示到到屏幕中央;使用mark.png为天安门做标记。

MainActivity.java代码如下:

  1. package com.scott.map;  
  2.   
  3. import android.graphics.drawable.Drawable;  
  4. import android.os.Bundle;  
  5.   
  6. import com.google.android.maps.GeoPoint;  
  7. import com.google.android.maps.MapActivity;  
  8. import com.google.android.maps.MapView;  
  9.   
  10. public class MainActivity extends MapActivity {  
  11.   
  12.     private MapView mapView;  
  13.     private static final double latitude = 39.908716;  
  14.     private static final double longitude = 116.397529;  
  15.       
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.main);  
  20.   
  21.         mapView = (MapView) findViewById(R.id.mapView);  
  22.         //启用内建的缩放控制器  
  23.         mapView.setBuiltInZoomControls(true);  
  24.         //启用点击事件处理  
  25.         mapView.setClickable(true);  
  26.           
  27.         //获取标记图片  
  28.         Drawable marker = getResources().getDrawable(R.drawable.mark);  
  29.         //设置边界  
  30.         marker.setBounds(00, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());  
  31.         //创建自定义图层实例  
  32.         LocationOverlay locations = new LocationOverlay(marker);  
  33.         //添加自定义图层  
  34.         mapView.getOverlays().add(locations);  
  35.           
  36.         //以指定纬度和经度建立一个GeoPoint实例  
  37.         GeoPoint point = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));  
  38.         //设置缩放级别  
  39.         mapView.getController().setZoom(17);  
  40.         //将指定的点移动到中央位置  
  41.         mapView.getController().animateTo(point);  
  42.     }  
  43.   
  44.     @Override  
  45.     protected boolean isRouteDisplayed() {  
  46.         return false;  
  47.     }  
  48. }  

需要注意,我们必须继承com.google.android.maps.MapActivity,因为MapView必须和MapActivity结合才能使用地图服务。

在MainActivity中,我们用到了LocationOverlay,它是用来在地图上做图层标记的,LocationOverlay.java代码如下:

  1. package com.scott.map;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.graphics.Canvas;  
  7. import android.graphics.drawable.Drawable;  
  8.   
  9. import com.google.android.maps.GeoPoint;  
  10. import com.google.android.maps.ItemizedOverlay;  
  11. import com.google.android.maps.MapView;  
  12. import com.google.android.maps.OverlayItem;  
  13.   
  14. public class LocationOverlay extends ItemizedOverlay<OverlayItem> {  
  15.   
  16.     private List<OverlayItem> locations = new ArrayList<OverlayItem>();  
  17.     private Drawable marker;  
  18.   
  19.     public LocationOverlay(Drawable defaultMarker) {  
  20.         super(defaultMarker);  
  21.         //保存标记图片  
  22.         marker = defaultMarker;  
  23.         //以指定纬度和经度建立一个GeoPoint实例  
  24.         GeoPoint point = new GeoPoint((int)(39.908716 * 1E6),(int)(116.397529 * 1E6));  
  25.         //添加一个图层项  
  26.         locations.add(new OverlayItem(point, "target""target"));  
  27.           
  28.         //调用父类方法 放置标记  
  29.         populate();  
  30.     }  
  31.       
  32.     @Override  
  33.     public void draw(Canvas canvas, MapView mapView, boolean shadow) {  
  34.         super.draw(canvas, mapView, shadow);  
  35.         //以图片的底部居中方式放置标记图片  
  36.         boundCenterBottom(marker);  
  37.     }  
  38.   
  39.     @Override  
  40.     protected OverlayItem createItem(int i) {  
  41.         return locations.get(i);  
  42.     }  
  43.   
  44.     @Override  
  45.     public int size() {  
  46.         return locations.size();  
  47.     }  
  48.   
  49. }  

布局文件/res/layout/main.xml如下:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas./apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     >  
  6.     <com.google.android.maps.MapView  
  7.         android:id="@+id/mapView"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent"  
  10.         android:enabled = "true"  
  11.         android:apiKey="刚才申请到的apiKey值"  
  12.     />  
  13. </FrameLayout>  

最后别忘了配置AndroidManifest.xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas./apk/res/android"  
  3.       package="com.scott.map"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <!-- 使用com.google.android.maps类库 -->  
  8.         <uses-library  android:name="com.google.android.maps" />  
  9.         <activity android:name=".MainActivity"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.     </application>  
  17.     <uses-sdk android:minSdkVersion="8" />  
  18.     <!-- 以下权限都是地图服务要用到的 -->  
  19.     <uses-permission android:name="android.permission.INTERNET"/>  
  20.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
  21.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
  22. </manifest>   

上面的工作都做完之后,我们就要在模拟器中运行了,我们需要新建一个支持Google APIs的模拟器,如图:

然后就可以运行我们的例子了,我们运行的结果如图:

好了,今天先介绍到这里,以后有时间和大家分享一下地图服务的高级应用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多