Android开发 GoogleMap之用户定位

最近调研了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,查看模拟器,就可以看见模拟的当前位置了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值