您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 第十二章__基于google_map开发个人移动地图
基于GoogleMap开发个人移动地图江苏润和软件股份有限公司课程目标1.完成GoogleMap的开发2.完成文章管理器课程目标1.完成GoogleMap的开发2.完成文章管理器本章目标1.了解位置服务的概念2.了解地图密钥的申请方式3.掌握获取位置信息的方法4.掌握MapView和MapController的使用方法5.掌Google地图覆盖层的使用方法1、位置服务1.1介绍位置服务位置服务(Location-BasedServices,LBS),又称定位服务或基于位置的服务,融合了GPS定位、移动通信、导航等多种技术,提供了与空间位置相关的综合应用服务位置服务首先在日本得到商业化的应用2001年7月,DoCoMo发布了第一款具有三角定位功能的手持设备2001年12月,KDDI发布第一款具有GPS功能的手机基于位置的服务发展迅速,已涉及到商务、医疗、工作和生活的各个方面,为用户提供定位、追踪和敏感区域警告等一系列服务提供位置服务,首先需要获得LocationManager对象1.1位置服务获取LocationManager可以通过调用android.app.Activity.getSystemService()函数实现android.app.Activity.getSystemService()函数代码如下代码第1行的Context.LOCATION_SERVICE指明获取的服务是位置服务代码第2行的getSystemService()函数,可以根据服务名称获取Android提供的系统级服务1.1位置服务Android支持的系统级服务表Context类的静态常量值返回对象说明LOCATION_SERVICElocationLocationManager控制位置等设备的更新WINDOW_SERVICEwindowWindowManager最顶层的窗口管理器LAYOUT_INFLATER_SERVICElayout_inflaterLayoutInflater将XML资源实例化为ViewPOWER_SERVICEpowerPowerManager电源管理ALARM_SERVICEalarmAlarmManager在指定时间接受IntentNOTIFICATION_SERVICEnotificationNotificationManager后台事件通知KEYGUARD_SERVICEkeyguardKeyguardManager锁定或解锁键盘SEARCH_SERVICEsearchSearchManager访问系统的搜索服务VIBRATOR_SERVICEvibratorVibrator访问支持振动的硬件CONNECTIVITY_SERVICEconnectionConnectivityManager网络连接管理WIFI_SERVICEwifiWifiManagerWi-Fi连接管理INPUT_METHOD_SERVICEinput_methodInputMethodManager输入法管理1.1位置服务在获取到LocationManager后,还需要指定LocationManager的定位方法,然后才能够调用LocationManagergetLastKnowLocation()方法获取当前位置LocationManager支持的定位方法有两种GPS定位:可以提供更加精确的位置信息,但定位速度和质量受到卫星数量和环境情况的影响网络定位:提供的位置信息精度差,但速度较GPS定位1.1位置服务LocationManager支持定位方法在指定LocationManager的定位方法后,则可以调用getLastKnowLocation()方法获取当前的位置信息LocationManager类的静态常量值说明GPS_PROVIDERgps使用GPS定位,利用卫星提供精确的位置信息,需要android.permissions.ACCESS_FINE_LOCATION用户权限NETWORK_PROVIDERnetwork使用网络定位,利用基站或Wi-Fi提供近似的位置信息,需要具有如下权限:android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION.1.1位置服务以使用GPS定位为例,获取位置信息的代码如下1.Stringprovider=LocationManager.GPS_PROVIDER;2.Locationlocation=locationManager.getLastKnownLocation(provider);代码第2行返回的Location对象中,包含了可以确定位置的信息,如经度、纬度和速度等通过调用Location中的getLatitude()和getLonggitude()方法可以分别获取位置信息中的纬度和经度,示例代码如下1.doublelat=location.getLatitude();2.doublelng=location.getLongitude();1.1位置服务LocationManager提供了一种便捷、高效的位置监视方法requestLocationUpdates(),可以根据位置的距离变化和时间间隔设定产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件LocationManager中设定监听位置变化的代码如下第1个参数是定位的方法,GPS定位或网络定位第2个参数是产生位置改变事件的时间间隔,单位为微秒第3个参数是距离条件,单位是米第4个参数是回调函数,在满足条件后的位置改变事件的处理函数1.1位置服务实现locationListener的代码如下代码将产生位置改变事件的条件设定为距离改变10米,时间间隔为2秒1.LocationListenerlocationListener=newLocationListener(){2.publicvoidonLocationChanged(Locationlocation){3.}4.publicvoidonProviderDisabled(Stringprovider){5.}6.publicvoidonProviderEnabled(Stringprovider){7.}8.publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){9.}10.};1.1位置服务第2行代码onLocationChanged()在设备的位置改变时被调用第4行的onProviderDisabled()在用户禁用具有定位功能的硬件时被调用第6行的onProviderEnabled()在用户启用具有定位功能的硬件时被调用第8行的onStatusChanged()在提供定位功能的硬件的状态改变时被调用,如从不可获取位置信息状态到可以获取位置信息的状态,反之亦然为了使GPS定位功能生效,还需要在AndroidManifest.xml文件中加入用户许可实现代码如下uses-permissionandroid:name=android.permission.ACCESS_FINE_LOCATION/1.1位置服务位置服务一般都需要使用设备上的硬件,最理想的调试方式是将程序上传到物理设备上运行,但在没有物理设备的情况下,也可以使用Android模拟器提供的虚拟方式模拟设备的位置变化,调试具有位置服务的应用程序首先打开DDMS中的模拟器控制,在LocationControls中的Longitude和Latitude部分输入设备当前的经度和纬度,然后点击Send按钮,就将虚拟的位置信息发送到Android模拟器中1.1位置服务在adbshell命令中可以确定经纬度,命令如下:geofix121.4669036865234431.22337141316801上海geofix113.2752227783203123.128994281453547广州geofix108.9496135711669934.266225427528674西安geofix116.3964986801147539.90861699713222北京geofix117.0224189758300836.67557848857602济南geofix118.784072399139432.041013054723734新街口1.1位置服务在程序运行过程中,可以在模拟器控制器中改变经度和纬度坐标值,程序在检测到位置的变化后,会将最新的位置信息显示在界面上但笔者在1.5版本的Android模拟器中进行调试时,发现模拟器控制器只能成功的将虚拟坐标发送到模拟器中2次,超过2次后模拟器对新发送的虚拟坐标不再响应1.1位置服务下面是CurrentLocationDemo示例中LocationBasedServiceDemo.java文件的完整代码:1.packageedu.hrbeu.LocationBasedServiceDemo;2.3.importandroid.app.Activity;4.importandroid.content.Context;5.importandroid.os.Bundle;6.importandroid.widget.TextView;7.importandroid.location.Location;8.importandroid.location.LocationListener;9.importandroid.location.LocationManager;10.1.1位置服务11.publicclassLocationBasedServiceDemoextendsActivity{12.@Override13.publicvoidonCreate(BundlesavedInstanceState){14.super.onCreate(savedInstanceState);15.setContentView(R.layout.main);16.17.StringserviceString=Context.LOCATION_SERVICE;18.LocationManagerlocationManager=(LocationManager)getSystemService(serviceString);19.Stringprovider=LocationManager.GPS_PROVIDER;20.Locationlocation=locationManager.getLastKnownLocation(provider);21.getLocationInfo(location);22.locationManager.requestLocationUpdates(provider,2000,0,locationListener);23.}24.1.1位置服务25.privatevoidgetLocationInfo(Locationlocation){26.StringlatLongInfo;27.TextViewlocationText=(TextView)findViewById(R.id.txtshow);28.if(location!=null){29.doublelat=location.getLatitude();30.doublelng=location.getLongitude();31.latLongInfo=Lat:+lat+\nLong:+lng;32.}33.else{34.latLongInfo=Nolocationfound;35.}36.locationText.setText(YourCurrentPositionis:\n+latLon
本文标题:第十二章__基于google_map开发个人移动地图
链接地址:https://www.777doc.com/doc-4618808 .html