最近调研了Android地图方面的应用,写下此博客,与大家一起分享!
GoogleMap API的使用介绍:
一、准备工作
1、下载安装Google Map API
在默认情况下,在安装Google AndroidSDK时,是不需要必须安装Google Map API的。但要做Map应用的话,就必须安装Google Map API。
通过启动Android SDK and AVD Manager这个SDK管理器去下载安装Google Map API。在启动SDK管理器后,选择“InstalledOptions”,去查看你已经安装了哪些SDK和是否经安装Google Map API,如果尚未安装的话,可以在“AvailablePackages”中查找并下载安装,如下图所示:
页面中显示的是我已经安装成功的API,请在Available packages中选择你需要的API,下载安装即可。
2、获取GoogleMap API KEY
在正式使用GoogleMap API前,必须先生成Google Map API KEY。
生成步骤:
(1) 需要应用程序的签名证书(在开发阶段,模拟器使用调试证书来签名应用程序。在发布应用时,需要自己生成的签名证书),调试证书位置:从Eclipse的Preferences菜单,转到Android->debug中,调试证书的位置显示在”Defaultdebug keystore”字段中。
(2)使用keytool 获得签名证书的MD5指纹
keytool -list -keystore debug.keystore
密码:android
获取MD5认证指纹
(3) 将证书的MD5指纹粘贴到以下Google网站的适当字段中
http://code.google.com/intl/zh-CN/android/maps-api-signup.html生成map apiKey
3、实例开发:
(1)新建Google Map工程,注意采用Google APIs。
(2)添加权限和添加包的引用
由于使用GoogleMap API,所以必须添加
<uses-library android:name="com.google.android.maps" />
由于需要从网络获取地图数据,所以需要访问网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
如果使用到用户定位,则需要添加以下权限:
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
(3)创建MapView(MapView用于显示地图的View组件,在Activity的布局文件中需要定义MapView,并添加属性android:apiKey=“申请的map apiKey”)
要显示地图,需要创建一个MapView,在Xml文件中的布局如下。其中的android:apiKey的值就是之前申请的MapapiKey。
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_below="@id/searchRegion"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:apiKey="Map API KEY"/>
也可以在程序中通过如下代码来创建MapView:
MapView mapView = new MapView(this, "Map API KEY");
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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_below="@id/searchRegion" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="true" android:apiKey="GOOGLE MAP API KEY"/> </RelativeLayout>
(4) 继承自MapActivity(MapActivity用于显示Map的Activity,是一个抽象类,任何想要显示MapView的Activity都需要继承MapActivity。)
获取MapView,并对地图操作进行设置
mMapView = (MapView) findViewById(R.id.mapview); //支持地图缩放 mMapView.setBuiltInZoomControls(true); //地图控制器 mMapController = mMapView.getController();
(5)MapController(用于地图的移动、缩放等)
mMapController = mMapView.getController(); GeoPoint myLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000)); mMapController.animateTo(myLocation); //定位到经纬度所指定的地方
到此为止,地图就可以显示出来了!
二、用户定位
1、用户定位主要用到的api在android.location包中。
LocationManager:用于管理用户定位服务。
LocationProviders:提供多种的定位方式。
常用的定位方式包括:GPS、NETWORK
2、需要添加的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>如果定位方式为NETWORK,权限也可以只添加权限:<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
3、获取LocationManager
4、实现LocationListener
5、注册监听
代码如下://获取系统的位置服务 locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //在地图上显示我的位置的图层 whereAmI = new MyLocationOverlay(this, mMapView); mMapView.getOverlays().add(whereAmI); /*Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(false); criteria.setPowerRequirement(Criteria.POWER_LOW); //取得效果最好的provider provider = locMgr.getBestProvider(criteria, true);*/ //使新覆盖图显示在屏幕上 mMapView.postInvalidate(); //位置改变的监听 locListener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(Location location) { showLocation(location); } };
@Override protected void onResume() { Log.d(TAG, "GoogleMapActivity onResume start"); super.onResume(); //绑定位置改变的监听 locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5, locListener); whereAmI.enableMyLocation(); //如果拥有一个已知位置,将立即转到该位置;如果没有最后的已知位置,此调用将设置一个Runnable,以在知道当前位置 //之后立即将地图的中心位置设置为当前位置 //如果拥有一个已知位置,将立即转到该位置 whereAmI.runOnFirstFix(new Runnable() { @Override public void run() { //设置地图显示中心 mMapController.setCenter(whereAmI.getMyLocation()); } }); Location lastLoc = locMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER); showLocation(lastLoc); Log.d(TAG, "GoogleMapActivity onResume end"); } @Override protected void onPause() { Log.d(TAG, "GoogleMapActivity onPause start"); super.onPause(); locMgr.removeUpdates(locListener); whereAmI.disableMyLocation(); Log.d(TAG, "GoogleMapActivity onPause end"); } /** * * Desc:用户定位 * @param location */ private void showLocation(Location location) { if (null != location) { Log.d(TAG, "Location lat:" + location.getLatitude() + ";lng:" + location.getLongitude()); double lat = location.getLatitude(); double lng = location.getLongitude(); GeoPoint myLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000)); mMapController.animateTo(myLocation); } }
模拟器中模拟GPS定位,可在eclipse中DDMS操作界面中的Emulator Controller中输入经纬度,模拟GPS定位,如图:![]()
点击send,查看模拟器,就可以看见模拟的当前位置了!