第9章Android位置服务

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第九章Android位置服务与地图应用本章目标:了解位置服务掌握Google地图应用了解XML的解析9.1位置服务位置服务(LocationBasedServices,LBS),又称定位服务或基于位置的服务,融合了GPS定位、移动通信、导航等多种技术,提供了与空间位置相关的综合应用服务。位置服务首先在日本得到商业化的应用。2001年7月,DoCoMo发布了第一款具有三角定位功能的手持设备,2001年12月,KDDI发布第一款具有GPS功能的手机。近些年来,基于位置的服务发展更加迅速,涉及到商务、医疗、工作和生等各个方面,为用户提供定位、追踪和敏感区域警告等一系列服务。Android平台支持提供服务的API,在开发过程中主要用到LocationManager和LocationProviders对象。LocationManager可以用来获取当前的位置,追踪设备的移动路线,或设定敏感区域,在进入或者离开敏感区域时设备会发出特定警报。LocationProviders则是能够提供定位功能的组件集合,集合中的每种组件以不同的技术提供设备的当前位置,区别在于定位的精度、速度和成本等方面。9.1位置服务为了使开发的程序能够提供位置服务,首先需要获得LocatioManager对象。获取LocatioManager可以通过调用android.app.Activity.getSystemService()函数实现,代码如下:StringserviceString=Context.LOCATION_SERVICE;LocationManagerLocationManager=(LocationManager)getSystemService(serviceString);代码中的Context.LOCATION_SERVICE指明获取的服务是位置服务,getSystemService()函数,可以根据服务名称获取Android提供的系统级服务。表9-1Android支持的系统级服务表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输入法管理9.1位置服务在获得LocationManager后,还需要指定LocationManager的定位方法,然后才能够调用LocationManager.getLastKnowLocation()方法获取当前位置。目前LocationManager支持的定位方法有两种,分别是使用GPS定位和使用网络定位。GPS定位可以提供更加精确的位置信息,但定位速度和质量受到卫星数量和环境情况的影响;网络定位提供的位置信息精度较差,但速度较GPS定位快。表9-2LocationManager支持定位方法表LocationManager类的静态常量值说明GPS_PROVIDERgps使用GPS定位,利用卫星提供精确的位置信息,需要android.permissions.ACCESS_FINE_LOCATION用户权限NETWORK_PROVIDERnetwork使用网络定位,利用基站或Wi-Fi提供近似的位置信息,需要具有如下权限:android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION.9.1位置服务在指定LocationManager的定位方法后,则可以调用getLastKnowLocation()方法获取当前的位置信息。以使用GPS定位为例,获取位置信息的代码如下:Stringprovider=LocationManager.GPS_PROVIDER;Locationlocation=locationManager.getLastKnownLocation(provider);代码中返回的Location对象中,包含了可以确定位置的信息,如经度、纬度和速度等,用户可以通过调用Location中的getLatitude()和getLonggitude()方法分别获取位置信息中的纬度和经度,示例代码如下:doublelat=location.getLatitude();doublelng=location.getLongitude();9.1位置服务在很多提供定位服务的应用程序中,不仅需要获取当前的位置信息,还需要监视位置的变化,在位置变化时调用特定的处理方法。LocationManager提供了一种便捷、高效的位置监视方法requestLocationUpdates(),可以根据位置的距离变化和时间间隔设定产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件。LocationManaget中设定监听位置变化的代码如下:locationManager.requestLocationUpdates(provider,2000,10,locationListener);方法中的第1个参数是定位的方法,GPS定位或网络定位;第2个参数是产生位置改变事件的时间间隔,单位为微秒;第3个参数是距离条件,单位是米;第4个参数是回调函数,是在满足条件后的位置改变事件的处理函数。上面的代码将产生位置改变事件的条件设定距离改变为10米,时间间隔为2秒。9.1位置服务实现locationListener代码如下:LocationListenerlocationListener=newLocationListener(){publicvoidonLocationChanged(Locationlocation){}publicvoidonProviderDisabled(Stringprovider){}publicvoidonProviderEnabled(Stringprovider){}publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){}};代码中的onLocationChanged()在设备的位置改变时被调用;onProviderDisabled()在用户禁用具有定位功能的硬件时被调用;onProviderEnabled()在用户启用具有定位功能的硬件时被调用;onStatusChanged()在提供定位功能的硬件的状态改变时被调用,如从不可获取位置信息状态到可以获取位置信息的状态,反之亦然。最后,为了使GPS定位功能生效,还需要在AndroidManifest.xml文件中加入用户许可,代码如下:uses-permissionandroid:name=android.permission.ACCESS_FINE_LOCATION/9.2.1申请地图密钥为了在手机中更直观地显示地理信息,程序开发人员可以直接使用Google提供的地图服务,实现地理信息的可视化开发。只要使用MapView(com.google.android.maps.MapView)就可以将Google地图嵌入到Android应用程序中。但在使用MapView进行开发前,必须向Google申请一组经过验证的“地图密钥(MapAPIKEY)”,才能正常使用Google的地图服务。“地图密钥”是访问Google地图数据的密钥,无论是模拟器还是在真实设备中都需要使用这个密钥。注册“地图密钥”的第一步是申请一个Google账户,也就是Gmail电子邮箱,申请地址。9.2.1申请地图密钥在得到Google账户之后,下一步工作是找到保存Debug证书的keystore的保存位置,并获取证书的MD5散列值。keystore是一个密码保护的文件,用来存储Android提供的用于调试的证书,获取MD5散列值的主要目的是为下一步申请“地图密钥”做准备。获取证书的保存地址如图9-3所示,首先打开Eclipse,通过windows-Preferences打开配置窗体,在Android-Build栏中的Defaultdebugkeystore中可以找到。为了获取Debug证书的MD5散列值,需要打开命令行工具CMD,然后切换到keystore的目录,输入如下命令:keytool–list–keystoredebug.keystore如果提示无法找到keytool,可以将JavaSDK/bin的路径添加到系统的PATH变量中。在提示输入keystore密码时,输入默认密码android,MD5散列值将显示在最下方。如图9-4所示,每台电脑的MD5散列值都不一样,这个一定要引起读者注意。笔者的MD5散列值为68:76:89:C8:A4:24:61:F9:EA:F3:F7:70:CC:FD:C8:15。9.2.1申请地图密钥申请“地图密钥”的最后一步是打开申请页面,输入MD5散列值。申请页面的地址是:,9.2.1申请地图密钥输入MD5散列值后,单击GenerateAPIKey按钮,将提示用户输入Google账户,正确输入Google账户后,将产生申请“地图密钥”的获取结果,如图9-6所示。9.2.2使用Google地图在申请到“地图密钥”后,下面考虑如何在Android系统中显示和控制Google地图。MapView是地图显示控件,可以设置不同显示模式,例如卫星模式、街道模式或交通模式。而MapController则是MapView的控制器,可以控制MapView的显示中心和缩放级别等功能。下面的内容以GoogleMapDemo为例,说明如何在Android系统中开发Google地图程序。这个示例将在程序内部设置一个坐标点,然后在程序启动时你,使用MapView控件在地图上显示这个坐标点的位置。因为普通的Android程序并不包含支持Google地图开发的扩展库,因此应在建立工程时将com.google.android.maps的扩展库添加到工程中,这样就可以使用Google地图的所有功能了,添加com.google.android.maps扩展库的扩展方式是在创建工程时,在BuidTarget选项中选择GoogleAPIs9.2.3Google地图上贴上标记本节讲一个在Google地图某一个固定的经纬度上贴上相应的标记。在前面的章节中,我们接触了如何与Google地图服务系统的互动,但是我们更希望在地图上贴上自己的标记和注释,这需要可以在地图上覆盖一些对象。要做

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功