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

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

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

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

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代码如下:

package com.scott.map; import android.graphics.drawable.Drawable; import android.os.Bundle; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapView; public class MainActivity extends MapActivity { private MapView mapView; private static final double latitude = 39.908716; private static final double longitude = 116.397529; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView) findViewById(R.id.mapView); //启用内建的缩放控制器 mapView.setBuiltInZoomControls(true); //启用点击事件处理 mapView.setClickable(true); //获取标记图片 Drawable marker = getResources().getDrawable(R.drawable.mark); //设置边界 marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); //创建自定义图层实例 LocationOverlay locations = new LocationOverlay(marker); //添加自定义图层 mapView.getOverlays().add(locations); //以指定纬度和经度建立一个GeoPoint实例 GeoPoint point = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6)); //设置缩放级别 mapView.getController().setZoom(17); //将指定的点移动到中央位置 mapView.getController().animateTo(point); } @Override protected boolean isRouteDisplayed() { return false; } }

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

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

package com.scott.map; import java.util.ArrayList; import java.util.List; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import com.google.android.maps.GeoPoint; import com.google.android.maps.ItemizedOverlay; import com.google.android.maps.MapView; import com.google.android.maps.OverlayItem; public class LocationOverlay extends ItemizedOverlay<OverlayItem> { private List<OverlayItem> locations = new ArrayList<OverlayItem>(); private Drawable marker; public LocationOverlay(Drawable defaultMarker) { super(defaultMarker); //保存标记图片 marker = defaultMarker; //以指定纬度和经度建立一个GeoPoint实例 GeoPoint point = new GeoPoint((int)(39.908716 * 1E6),(int)(116.397529 * 1E6)); //添加一个图层项 locations.add(new OverlayItem(point, "target", "target")); //调用父类方法 放置标记 populate(); } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); //以图片的底部居中方式放置标记图片 boundCenterBottom(marker); } @Override protected OverlayItem createItem(int i) { return locations.get(i); } @Override public int size() { return locations.size(); } }

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

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.google.android.maps.MapView android:id="@+id/mapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled = "true" android:apiKey="刚才申请到的apiKey值" /> </FrameLayout>

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

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.scott.map" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- 使用com.google.android.maps类库 --> <uses-library android:name="com.google.android.maps" /> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> <!-- 以下权限都是地图服务要用到的 --> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> </manifest>

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

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

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

更多相关文章

  1. 实现Android屏幕控制Androidscreencast应用
  2. android Jni 需要注意的地方
  3. Android源代码是这样搞到的(图解)
  4. Android中转义字符
  5. 2010.11.15———android spinner下拉列表
  6. android打电话发短信
  7. Android地图添加标记和文字【代码片段】
  8. 2010.11.15———android spinner下拉列表
  9. Android(安卓)音视频该如何学习?

随机推荐

  1. 多选一机制的实现(RadioButton的实现)
  2. 地图的使用 GoogleMapAPI
  3. Android有趣的开源框架
  4. Dialog修改密码的显示方式小巧写法
  5. android 获取所有传感器数据
  6. 操作json的工具类
  7. Android安卓长按ImageView保存图片到相册
  8. android 状态栏添加图标的函数
  9. 解决:The Genymotion virtual device cou
  10. Android(安卓)stuido程序真机运行时闪退