Android中配置和使用Google Map服务

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的模拟器,如图:

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

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

package com.MangoMap; //import android.app.Activity; import com.google.android.maps.MapActivity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; //MapView Com import com.google.android.maps.MapView; import com.google.android.maps.MapController; import com.google.android.maps.GeoPoint; //import com.google.android.maps. public class MangoMap extends MapActivity { /** Called when the activity is first created. */ private MapView mpv; private MapController mpc; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //地图 mpv = (MapView) findViewById(R.id.map); mpv.setTraffic(true); mpv.setClickable(true); mpv.setScrollContainer(true); mpc = mpv.getController(); GeoPoint gp = new GeoPoint((int) (23.05320 * 1000000), (int) (113.155550 * 1000000)); //地理坐标 mpc.animateTo(gp); mpc.setZoom(15); //mpc. // } @Override protected boolean isRouteDisplayed() { return false; } } //----------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> --> <com.google.android.maps.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="YOUR API key" /> <Button android:text="@+id/Button01" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> //--------------------- <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.MangoMap" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" /> <activity android:name=".MangoMap" 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="3" /> </manifest>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值