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

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

Android中配置和使用Google Map服务_第1张图片

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

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

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

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

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

Android中配置和使用Google Map服务_第2张图片

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

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

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

Android中配置和使用Google Map服务_第3张图片

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

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

Android中配置和使用Google Map服务_第4张图片

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

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

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

Android中配置和使用Google Map服务_第5张图片

项目结构如图所示:

Android中配置和使用Google Map服务_第6张图片

这个示例主要完成以下功能:显示地图界面;定位天安门并显示到到屏幕中央;使用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的模拟器,如图:

Android中配置和使用Google Map服务_第7张图片

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

Android中配置和使用Google Map服务_第8张图片

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

更多相关文章

  1. android 图片处理 resize 探秘(图片缩放、压缩问题)
  2. Android视频图片缩略图的获取
  3. [Android] Json格式解析和文字图片传输
  4. Android 图片的浏览、缩放、拖动和自动居中
  5. Android地图添加标记和文字【代码片段】
  6. android 从matrix获取处理过的图片的实际宽度
  7. Android 拍照 录音 拍视频 旋转 裁剪 压缩图片
  8. Android中imageView图片放大缩小及旋转功能示例代码
  9. Android 将View 转化为bitmap 图片

随机推荐

  1. 再解 JavaScript 原型 与原型链
  2. Windows 10配置阿里云DNS
  3. html的class命名规范(前端类名取名)
  4. JavaScript 数组常见操作(一)
  5. Promise 基本方法的简单实现
  6. HTTP 缓存
  7. Ubuntu操作系统配置阿里云镜像方法二
  8. Promise 基本方法的简单实现
  9. Promise 基本方法的简单实现
  10. 浅谈PHP编程之面向对象