资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第11章 旅游小助手的实现,11.1 系统功能介绍和架构设计,本章将主要介绍通过Android终端和云平台进行功能整合,从而实现基于云服务的移动APP,在该应用中,云端采用百度云为基础,而客户端在采用Android 4.1.2。,11.1.1 系统功能介绍,本章中所应用的案例是一个相对功能简单的旅游辅助系统,本项目从目前已有的旅游移动APP中选取其一些核心功能作为实现技术的研究,从而引导读者在今后的开发中实现复杂的,能够产品化的移动APP。 本项目的服务端采用百度云服务,该服务是由接入层、计算曾和数据层三方面构成,如图11-1所示。Android客户端只负责与服务器接入层之间的数据交互,通过Apache的HttpClient向服务器提交HTTP请求,从而获取服务器的数据响应来实现,11.1.1 系统功能介绍,Android APP和云服务之间的通讯。 本系统主要实现有以下三方面的功能: 用户可以通过GPS、基站和WIFI定位当前用户的位置,并显示地图中。 当用户需要查询当地公交时,可以通过本系统获取公交线路的途径站点。 用户可以通过本系统进行多种语言的翻译,帮助异地解决语言问题,11.1.1 系统功能介绍,图11-1 百度云服务的架构图,11.1.2 系统架构设计,本系统采用目前最为普遍的MVC架构,即分为视图层、控制层和业务逻辑层,用户不直接和云服务的数据库进行交互,而是与服务端的接入层进行数据交换,再由计算层与数据层进行交换,从而把数据返回给用户。 视图层:用于在地图中显示用户的各种请求,结果控制层返回的数据。 控制层:主要负责视图层和业务逻辑层之间的交互,调用业务逻辑层,并把业务数据进过处理发送给视图层进行展示。,11.1.2 系统架构设计,业务逻辑层:负责实现系统中的业务逻辑部分,主要对云服务访问的封装和各功能之间的业务关系的处理。 此外本系统中采用Apache提供的开源软件HttpClient向服务器提交用户请求,通过该软件可以模拟HTTP请求,从而获取服务器的响应数据,这些数据应采用轻量级网络数据交换格式JSON数据格式,使开发者方便的进行数据解析和展示。,11.1.2 系统架构设计,通过采用以上的系统架构,整个应用能够很好的满足用户需求的改变和重构的要求,使得系统具有很好的复用能力,减少程序员重复开发的负担,同时也保证代码了代码的可靠性,也使得更系统架构能够适用于各种平台上的应用开发。,11.2 百度API Key的申请,到笔者撰文为止,百度开发者的AK(API Key)系统已经升级,采用了全新的体系结构,主要分为LBS服务类和应用接入服务类,这两类在AK的申请上有很大差别,因此本节将主要讲述关于百度AK申请的流程和使用方法。 11.2.1 百度LBS服务AK的申请 目前在百度开发者系统中百度地图服务归属于百度LBS服务,因此在申请AK时需要在百度LBS控制台中进行的申请,此外由于目前百度,11.2 百度API Key的申请,定位服务已和地图服务进行分离,所以如果要使用定位服务还需要进行相应AK的申请,但如果一个应用中既要使用百度地图服务,也要使用百度定位服务,那么就只需要申请一个AK即可,具体申请流程如下: 第一步:申请百度开发者账号,并进行登录。 第二步:进入百度LBS服务的API控制台地址http:/lbsyun.baidu.com/apiconsole/key,如图11-2所示,11.2 百度API Key的申请,图11-2 百度API控制台,第三步:点击“创建密钥“,系统将为您自动生成密钥,如图11-3所示。,图11-2 创建API Key,11.2 百度API Key的申请,第四步:配置新生成的密钥。点击新生成密钥的“设置“按钮,将弹出对话框对AK进行类型配置,如图11-3所示,图11-3 AK密钥的配置,11.2 百度API Key的申请,第五步:选择“Key type”为“for mobile”,表示该密钥是为移动端申请,如图11-4所示。此时会看到除了“Key type”选项外还有一个安全码,该安全码由Android签名证书的SHA1值和程序报名组成,其中安全码可以Eclipse的配置目录下“Android”-“build”找到,如图11-4所示,而程序包名则可以在AndroidManifest.xml中package项找到,最后把两个值用分号隔开一起填入安全码中,格式如下: 安全码格式:“Android SHA1”+“;”+“报名”。,11.2 百度API Key的申请,图11-3 AK类型的选择,图11-4 Android SHA1值,11.2 百度API Key的申请,在笔者撰稿为止,百度的应用接入服务进入了BAE 3.0测试版本,同时新旧版本的管理控制台服务都在使用,但未来BAE 3.0正式启用后会采用新版的管理控制台,因此本节将以新版管理控制台为基础阐述如何快速创建一个介入应用,并获取对应的AK。 要使用百度接入服务首先必须要申请百度的开发者账号,然后进入百度的开发者中心(http:/developer.baidu.com/),在页面的右上角点击并进入“新版管理控制台”,在页面的左上角点击“创建应用”即可进入应用的配置页面,如图11-5所示。在该页面中只需填写应用名称和应用类型即可立即创建百度接入服务应用,当应用创建完毕后在信息页面中就可以看到AK信息,如图11-6所示。,11.2 百度API Key的申请,图11-5 创建应用界面,图11-6 API Key获取页面,11.3 JSON数据的解析,在本系统中Android端与云服务之间的交互采用JSON作为数据交换格式。JSON是一种轻量级的数据交换格式,该格式既能被人所方便的读取,也可以被计算机进行解析和生成,同时JSON也是一种与语言无关的数据交换格式,结构非常类似XML。 JSON目前被如C、C+、Java、C#等几乎所有常用的编程语言所支持,通过这些语言提供的函数就能完整实现数据的接收、发送和解析,因此JSON是目前网络中传递数据较为理想的一种格,11.3 JSON数据的解析,式,通过JSON数据具有相互嵌套的特点,其主要的数据类型有以下两种: 对象(JSON Object):该结构由键值对数据组成,如格式KEY:VALUE,KEY:VALUE,.。在面向对象的语言中,KEY为该对象的属性,VALUE为对象所对应的属性值,类似于JAVA中的MAP类型。当系统需要数据时,只需要通过提前约定的KEY找到对应的值即可获取数据,每个对象值的类型可以是数字、字符串、数组、JSON对象/数组几种。,11.3 JSON数据的解析,数组(JSON Array):该结构由中括号“”括起来,而其中的每一项则使用大括号“”括起来,如结构KEY: VALUE, KEY: VALUE, KEY: VALUE, KEY: VALUE, KEY: VALUE, KEY: VALUE,当需要取值时和所有语言一样,听过索引获取,每个元素的类型可以是数字、字符串、数组、JSON对象/数组几种。,11.3 JSON数据的解析,目前在Android系统中已经内置了对JSON格式的支持,如JSONArray、JSONObject,以及JSONException等,通过这些内置类可以方便的完成JSON数据的对象和数组的解析。其中使用最多的就是JSONArray和JSONObject两个类,主要功能如下: JSONArray:表示一个JSON数组,它可以完成Java集合与JSON字符串之间的相互转换。 JSONObject:表示一个JSON对象,它可以完成Java对象和JSON字符串之间的相互转化。,11.4 公交线路查询的实现,在第10章节已经详细介绍了百度地图的基本使用方法,本节将着重介绍如何利用百度 地图实现实时公交查询的功能。目前百度地图上的许多功能都是基于百度LBS云来实现的,当然公交查询页不例外,用户通过统一的LBS查询结果来获取所有的POI(兴趣点)数据,然后再通过统一ID进行路径查询,并显示在地图中,如图11-7所示。具体代码分为两部分完成,第一个部分为在百度LBS中查询相关城市公交信息,并从所有获得的POI中检出类型为公交线路的信息,然后得到该POI信息的ID号,通过该ID号就可以查询出对应的公交线路,具体代码如下:,11.4 公交线路查询的实现,1 public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) 2 / TODO Auto-generated method stub 3 if (arg2 != 0 | arg0 = null) 4 Toast.makeText(mContext, “抱歉,未找到结果“, 5 Toast.LENGTH_LONG).show(); 6 return; 7 8 MKPoiInfo curPoiInfo = null; 9 int totalPoiNum = arg0.getCurrentNumPois(); 10 busLineIDList.clear(); 11 for (int i = 0; i totalPoiNum; i+) ,11.4 公交线路查询的实现,12 if (2 = arg0.getPoi(i).ePoiType) 13 curPoiInfo = arg0.getPoi(i); 14 busLineIDList.add(curPoiInfo.uid); 15 16 17 if (curPoiInfo = null) 18 Toast.makeText(mContext, “抱歉,未找到结果“, 19 Toast.LENGTH_LONG).show(); 20 return; 21 22 mBDMKSearch.busLineSearch(“苏州“, busLineIDList.get(0); 23 ,11.4 公交线路查询的实现,第1行中onGetPoiResult函数是MKSearchListener接口中必须实现的函数,该函数的三个参数中第一个参数是搜索的结果,第二个参数是结果的类型,第三个参数则是错误代码,如果该值为0则表示正确。 第8行中的MKPoiInfo对象用于表示POI兴趣点信息。 第9行可以获取搜索结果的个数。 第12行通过判断获得POI兴趣点类型检索出公交线路的POI,并把该POI保存在第8行的对象中,该对象的UID值可以在后续程序中得到具体的公交信息。 以上就是第一部分的代码,第二部分则是通过UID查询出整个公交线路并在地图中展示,具体代码如下:,11.4 公交线路查询的实现,1 public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) 2 / TODO Auto-generated method stub 3 if (arg1 != 0 | arg0 = null) 4 Toast.makeText(mContext, “, Toast.LENGTH_LONG).show(); 5 return; 6 7 RouteOverlay routeOverlay = new RouteOverlay(mContext, mBDMapView); 8 routeOverlay.setData(arg0.getBusRoute();,11.4 公交线路查询的实现,9 mBDMapView.getOverlays().clear(); 10 mBDMapView.getOverlays().add(routeOverlay); 11 mBDMapView.refresh(); 12 mBDMapView.getController().animateTo(arg0.getBusRout
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号