Android Google Map API使用的八个步骤.doc_第1页
Android Google Map API使用的八个步骤.doc_第2页
Android Google Map API使用的八个步骤.doc_第3页
Android Google Map API使用的八个步骤.doc_第4页
Android Google Map API使用的八个步骤.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【IT168技术】当前,Android手机应用的数量日益增多,其中很多应用已成为人们生活中不可缺少的助手。在众多的Android应用中,其中LBS(基于地理位置的的应用)深受人们的喜爱,主要原因是人们只需要使用手机,就能随时查看自己当前所在的位置,以及所处位置的相关其他信息,商家可以进入更深入的数据挖掘,如推销产品,基于LBS的交友聊天等等。在本系列教程中,将指导开发者搭建一个简单的LBS应用,其主要功能是找出给定位置附近的商店,并且将这些商店用图标标识出来。本系列教程的阅读对象为对Android 开发有初步认识的开发者。本系列教程将分为两部分,第一部分是指导用户使用Mapview控件进行编程,其中包括了如何获得Google Map API,如何使用该API进行简单的开发,如何获得用户当前所在的位置。第二部分则包括如何在地图上,用第三方的组件库,实现气球式显示若干指定位置的功能。步骤1 创建新的Android 工程首先打开eclipse新建立一个Android 工程,其中相关参数设置如下:Project name:MallFinderBuild Target: Google APIs Platform 2.1 API Level 7Application Name: Mall FinderPackage Name: com.shawnbe.mallfinderCreate Activity: MallFinderActivityMinimumSDK: 7如下图所示:步骤2 注册Google Map API key由于在使用google map的时候,需要使用google map api的key,因此需要先注册一个开发者key,可以到如下地址进行注册:/android/add-ons/google-apis/mapkey.html ,其中需要我们先产生开发期间的md5 密纹才能完成注册,因此我们先学习如何生成一个MD5密纹。我们需要使用keytool工具,不使用传统的命令行方式下那枯燥的证书签名生成办法,而是直接在eclipse下通过插件进行完成,详细见步骤3步骤3 安装keytool插件在eclipse的Help菜单中,如下图,选择安装新软件:在安装地址中输入如下地址:/update ,如下图接下来会加载相关的安装程序,并显示用户协议,选择接受所有用户协议后进行安装,安装成功后重新启动eclipse即可生效。步骤4 产生开发期间的MD5密钥在重新启动eclipse后,会发现工具栏多了如下图的keytool菜单现在,我们打开debug.keystore,注意其位置回因操作系统不同而有不同Windows Vista : C:Users.androiddebug.keystoreWindows XP : C:Documents and Settings.androiddebug.keystoreOS X 和 Linux : /.android/debug.keystore点keytool菜单中,选择open keystore,根据提示,选择当前系统所在的debug.keystore位置并打开,如下图,其中,输入密码默认为android即可,并点Load加载。之后会在eclipse中出现新的keytool的视图,如下图所示:双击打开androiddebugkey,复制其md5密纹,然后访问页面/android/maps-api-signup.html ,接受其协议,将md5密纹复制进去,再点Generate API Key,即产生google map的api key,记得保存好这个KEY,在接下来的步骤中要使用步骤5 增加MapView控件接下来,我们可以往布局文件中增加MapView控件。我们在main.xml中添加如下代码: 在这个控件中,请注意要在android:apiKey的位置填入刚申请的google map api key。步骤6 设置相关的权限由于我们的应用需要调用Google Map的数据,以及通过手机的GPS获得相关的其他地理位置数据,因此我们必须在Android的Manifest文件中进行权限的设置。我们打开AndroidManifest.xml文件,然后增加如下代码所示的权限设置,注意添加在标签后,但要在标签前。 在这里,我们分别调用了gps位置服务权限,使用互联网的权限以及使用最佳位置查找的权限(FINE_LOCATION)。在本文中,其实没用到FINE_LOCATION,但只是告诉开发者可以调整使用不同的地理位置提供者(providers)以提供准确的位置服务,如果要有比较精确的地理位置服务,那么可以设置android.permisson.ACCESS_FINE_LOCATION服务。要注意的是在开发中,不要过多引用一些不需要使用的权限设置,否则会给用户带来担忧安全等问题。要是只想调用一般的位置服务,可以使用普通的android.permission.ACCESS_COARSE_LOCATION权限。为了在应用中使用Google Map,需要在Manifest文件中包含相关的类库文件,所以加入如下代码:为了视觉的美观,我们把标题栏也去掉,以便留给地图更大的空间,所以设置为android:theme=android:style/Theme.NoTitleBar下面是完整的Manifest文件代码: 步骤7 设置MapView下面对主activity程序(MallFinderActivity.java)进行修改,首先让其继承MapActivity类,如下:public class MallFinderActivity extends MapActivity 由于继承了MapActivity类,因此必须实现isRouteDisplayed方法,这个方法是用来做路线导航用的,这里我们不需要,因此只需要简单返回false即可:Overrideprotected boolean isRouteDisplayed() / TODO Auto-generated method stubreturn false;接下来我们就可以声明MapController控件,并对其进行相关属性的设置了,首先是声明控件private MapController mapController;private MapView mapView;并在oncreate方法中进行属性设置如下:mapView = (MapView)findViewById(R.id.mapView); mapView.setBuiltInZoomControls(true); mapView.setSatellite(false); mapView.setStreetView(true); mapController = mapView.getController(); mapController.setZoom(13);在上面的代码中,设置了地图显示的方式为街道模式(通过设置mapview的setStreetView属性值为true),并且通过mapView.setBuiltInZoomControls(true); 使用了系统内置的放大缩小功能,并设置了地图的放大缩小倍数为13。这个时候我们就可以选择运行应用,看下是否符合我们的初步预期效果,运行后效果如下图:步骤8 获得当前所在位置在LBS应用中,十分重要的工作是要获得当前设备所在的位置,这个可以使用locationManager类实现,在获得当前位置的时候是需要花费一些时间的。我们继续声明两个参数变量如下:private LocationManager locationManager;private GeoPoint currentLocation;分别声明了LocationManager类的实例和GeoPoint类的实例(用于下文中的经纬度的计算)。再增加如下几个方法:public void getLastLocation() String provider = getBestProvider(); currentLocation = locationManager.getLastKnownLocation(provider); if(currentLocation != null) setCurrentLocation(currentLocation); else Toast.makeText(this, Location not yet acquired, Toast.LENGTH_LONG).show(); public void animateToCurrentLocation() if(currentPoint!=null) mapController.animateTo(currentPoint); public String getBestProvider() locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setPowerRequirement(Criteria.NO_REQUIREMENT); criteria.setAccuracy(Criteria.NO_REQUIREMENT); String bestProvider = locationManager.getBestProvider(criteria, true); return bestProvider; public void setCurrentLocation(Location location) int currLatitude = (int) (location.getLatitude()*1E6); int currLongitude = (int) (location.getLongitude()*1E6); currentLocation = new GeoPoint(currLatitude,currLongitude); currentLocation = new Location(); currentLocation.setLatitude(currentPoint.getLatitudeE6() / 1e6); currentLocation.setLongitude(currentPoint.getLongitudeE6() / 1e6); 并且在oncreate方法中,添加对以上方法的调用代码如下:public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView)findViewById(R.id.mapView); mapView.setBuiltInZoomControls(true); mapView.setSatellite(false); mapView.setStreetView(true); mapController = mapView.getController(); mapController.setZoom(13); getLastLocation(); animateToCurrentLocation(); 首先,在getLastLocation这个方法中,创建了locationManager类的实例并且根据设置的条件返回一个合适的地理位置提供方法。在这里,我们并没有指定对地理位置提供者的查询条件,在实际应用中,开发者可以通过设置criteria.setAccuracy()和criteria.setPowerRequirement()方法进行查找。如果要使用最精确的provider的话,可以设置使用ACCURACY_FINE方法进行搜索,如下代码所示:criteria.setAccuracy(Criteria.ACCURACY_FINE);在本文中之所以不选择使用最准确的位置provider主要是因为是没在室外进行测试,都是在室内调试程序,建议开发完后换成GPS模式provider到室外进行调试那样将看到很好的效果。接下来代码中使用 currentLocation = locationManager.getLastKnownLocation(provider); 一句,获得最新的位置信息,并且在setCurrentLocation方法中,对通过prodiver获得的地理位置信息Location对象进行经纬度的转换为GeoPoint对象。然后调用animateToCurrentLocation方法,将地图的中心点定位到我们当前的位置上去。此外,由于我们的位置是会发生变化的,所以需要使用location 监听器去检测我们的位置变化,这时需要实现locationListener接口,如下所示:public class MallFinderActivity extends MapActivity implements LocationListener同时我们需要实现LocationListener类的以下几个方法:Overridepublic void onLocationChanged(Location arg0) / TODO Auto-generated method stub Overridepublic void onProviderDisabled(String arg0) / TODO Auto-generated method stub Overridepublic void onProviderEnabled(String arg0) / TODO Auto-generated method stub Overridepublic void on

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论