Android客户端
Android客户端(精选8篇)
Android客户端 第1篇
YouTube是目前世界上最大最流行的视频分享站点, 该站点每天增加几十亿个页面视图和数十万个视频文件。它不仅给用户提供大量丰富的视频内容, 还允许用户在任何时刻任何地点上传自己的视频[1]。
YouTube的另一个重要的特点是它提供数据API和播放器API。通过数据API, 开发者可以将YouTube的功能整合到自己开发的应用中, 并且可以执行搜索、上传视频、创建播放列表等更多操作。通过播放器API, 可以对YouTube视频播放进行控制, 可以设置播放器界面, 甚至构建自己的播放器控件[2]。
本文主要研究YouTube数据API在Android系统中的应用, 研究如何通过YouTube数据API访问视频内容, 并将访问的内容集成到Android系统的应用中, 实现视频元内容显示、关键字检索等功能。
1 YouTube 视频元格式
YouTube数据API是用来获取YouTube视频数据的, 在研究YouTube数据API在Android系统中的应用之前, 需要先了解一下YouTube数据API返回的视频数据格式。
YouTube数据API返回一个包含多个视频元数据的纲要。其中, 每个视频元都是一个Atom供稿, 该供稿的根标记是
2 YouTube 数据 API
YouTube数据API是一种基于REST的服务, YouTube数据API作为客户端首先向服务器发送一个指定资源的HTTP请求。这个HTTP请求类似于一个查询语句, 而且具有一个或多个输入参数。服务器收到该请求后, 使用Atom或RSS格式响应并回复该查询, 该响应可以在支持XML的任何客户端内进行解析[1]。
基于上面的原理, 使用YouTube数据API时, 一个重要的部分就是如何构造HTTP请求。由于YouTube数据API可以获取标准视频供稿和指定视频供稿的视频, 所以根据获取的视频供稿类型的不同, HTTP请求构造分为标准视频供稿请求和指定视频供稿请求。
2.1 标准视频供稿请求
标准视频供稿是包含YouTube用户行为的视频列表 (例如评分最高的视频供稿和观看次数最多的视频供稿) , 或者是由YouTube官方挑选的视频列表 (例如近期精选视频供稿) , 许多此类供稿均显示在YouTube官方的视频标签页中。YouTube每隔几分钟就会更新一次标准供稿[2]。
标准视频供稿请求中, 供稿ID为top_rated、top_favorites、most_viewed、most_discussed和most_responded的标准供稿均支持time参数。通过此参数可以获取仅包含前一天、前一周、前一个月的相关视频。例如, 检索前一天评分最高的视频列表的HTTP请求为http://gdata.youtube.com/feeds/api/standardfeed s/top_rated?time=today。
标准视频供稿还支持通过指定regionID获取指定区域、指定类别的视频。例如, 获取台湾地区评分最高的喜剧列表的H TTP请求为http://gdata.youtube.com/feeds/api/standardfeeds/T W/top_rated_Comedy。如果HTTP请求中指定了regionID, 那么指定的类别在相应的指定区域中必须是能够浏览的。例如, 开发者可以构造在台湾评分最高的新闻视频供稿的请求, 因为“新闻”在台湾是可以浏览的类别。但是, 无法构造在美国评分最高的新闻视频的请求, 因为“新闻”在美国是不可浏览的类别。
2.2 指定视频供稿请求
指定视频供稿请求是开发者自定义条件的视频供稿请求。开发者在YouTube提供的查询参数范围内, 按照固定的格式和自定义的参数, 构造HTTP请求, 获取想要的视频供稿。
指定视频 供稿请求 的格式 , 前端固定 为http : //gdata.youtube.com/feeds/api/videos, 请求后面的内容需要开发者自定义参数[2]。比如, 想获取视频标题中包含basketball的视频集 , 可以利用q参数构造HTTP请求http : //gdata.youtube.com/feeds/api/videos?q=basketball。
此外, 开发者还可以在请求中增加start-index参数指定获取视频的开始偏移量, max-results参数指定获取的视频最大数, 此参数与start-index参数结合使用, 可确定视频集返回的结果。Orderby参数用于对搜索结果集中的视频进行排序, 此参数的有效值包括published (发布时间) 、viewCount (观看次数) 和r ating (评价) 。例如, HTTP请求http://gdata.youtube.com/feeds/api/videos?q=football &orderby=published&start-index=11&ma x-results=10获取的是视频标题中含有football, 而且按照发布时间排序后, 从第11个视频开始的10个视频集。
3 YouTube 数据 API 在 Android 系统中的应用
通过以上对YouTube数据API的研究, 可以将这些内容应用到Android系统的应用开发中, 开发YouTube应用的客户端。
Android系统是一个基于Linux核心的开放的操作系统, A ndroid在采用Linux核心的基础上, 提供了各种函数库, 以及一个完整的应用程序框架。它提供Google自制的应用程序运行环境 (Dalvik) , 并提供基于Eclipse集成开发环境的免费、跨平台 (windows、Mac、Linux) 开发工具 (SDK) , 这使得开发人员很容易在Android平台上开发各种应用[3]。
3.1 系统图
Android系统结构分为四层, 从高到低分别是应用层、应用框架层、系统运行库层、Linux内核层。应用层是运行在虚拟机上的程序;应用框架层是Google的核心应用使用的框架;系统运行库层是Android提供的一些支持各个组件的C/C++库;L inux内核层包含了安全性、内存管理、进程管理、驱动模型、网络协议栈等, 同时也作为硬件和软件栈的抽象层[4]。
利用YouTube数据API开发的YouTube应用组入Android系统后的系统结构图, 如图1。YouTube应用通过YouTube数据API访问YouTube云端数据, 在Android端实现视频显示、检索、播放控制等功能。
3.2 代码
在Android系统中利用YouTube数据API开发的客户端应用代码量大, 由于篇幅限制, 只列出了使用YouTube数据API的主要代码。
获取YouTube数据情报的部分主要代码如下。
获取YouTube搜索情报的部分主要代码如下。
获取YouTube详细情报的部分主要代码如下。
4 结束语
本文对YouTube数据API进行了深入研究, 包括YouTube数据API提供的视频元格式、使用YouTube数据API时HTTP请求的种类, 以及HTTP请求的构造方法, 最后将YouTube数据API应用到Android系统中, 开发了YouTube的客户端应用。
摘要:YouTube作为目前世界上最流行的视频分享站点, 其一大特点就是它提供数据API, 开发者利用YouTube数据API提供的丰富的数据可以在各种平台上 (如Android系统) , 进行视频供稿获取、关键字检索、用户上传下载视频、视频播放等各种客户端应用。本文主要研究了YouTube数据API提供的数据元格式、视频供稿获取、关键字检索, 以及YouTube数据API在Android系统中的应用。
关键词:YouTube,数据API,Android OS
参考文献
[1]Vikram Vaswani.IBM developerWorks:结合使用YouTube API和PHP.
[2]Google Developers.https://developers.google.com/youtube/ge tting_started?hl=zh-cn#data_api
[3]盖索林, 王世江.Android开发入门指南 (第二版) [M].人民邮电出版社, 2009.
Android客户端 第2篇
4月17日,谷歌正式发布Android版的“Chrome Remote Desktop”远程桌面应用,让用户可以通过Android智能手机或平板电脑远程遥控PC或Mac电脑,实现多平台的一体化操控。此前,谷歌刚刚对Chrome OS进行了升级,升级的内容包括屏幕键盘功能。分析认为,谷歌此举意味着它或将推出采用Chrome系统的平板电脑。而据业内人士推测,该款平板电脑很可能由宏碁生产,因为这家台湾厂商曾经推出带触摸屏的Chromebook笔记本电脑。
Chrome最初只是谷歌开发的一款网页浏览器,在2012年推出移动版本,并支持Android、iOS、WP等系统。这款浏览器取得了巨大的成功,至去年9月,它的全球市场份额已达43%,超越微软IE成为第一大浏览器。
Chrome在浏览器领域的成功,让谷歌看到了新的机遇,它很快推出桌面操作系统Chrome OS,并发布了搭载该系统的笔记本电脑Chromebook。然而,由于全球PC市场低迷,Chrome OS及其产品所受到的关注远不如Android,但谷歌并降低松对该系统的支持。不过,这也让不少业内人士心存质疑,同时发展两个系统必然导致资源分散以及内部竞争,谷歌的这一做法是否有必要。
有分析人士认为,谷歌应该在两个平台间作出选择,确切地说,就是全力发展Android系统,毕竟该系统已经占据移动市场80%的份额,而PC的没落让Chrome的价值大打折扣,几乎不可能取得如Android的成就,不如专心耕耘浏览器市场,这才是它的立身之本。但谷歌高级副总裁桑达·皮采(SandarPichai)并不这么认为。
这位决定Chrome成败的关键人物表示,谷歌没有在Android与Chrome之间作出取舍,正是因为二者都很重要。“Chrome并不只是单一的浏览器或操作系统,”皮采称,“而是一个基于Web技术的支撑平台,在这个多屏化的世界中,它将成为Android的重要补充。”
皮采的观点,再次呈现了谷歌与微软,甚至苹果公司在云计算市场上的差异化战略。谷歌认为,未来用户在多数情况下只需要一个有Chrome浏览器的瘦客户端,所有工作都交给云去执行。但微软和苹果却都希望在有操作系统、办公文件、芯片、硬盘的富客户端上实现商业诉求。所以,再次发力Chrome产品,实际上代表了谷歌的另一种构想:打造一个专属于自己的多终端系统。而这其中包含的战略意义或许对谷歌更加重要。
多端智能化浪潮
一两年前,人们对于智能化的概念还停留在智能手机和平板电脑的层面上,但随着可穿戴智能设备的兴起,从智能电视、智能家居到车载智能系统,这股智能化浪潮正逐步进入人们生活的各个层面,而系统平台是其中最为关键部分。对于苹果、微软、谷歌等在操作系统领域拥有举足轻重地位的科技巨头来说,这是个巨大的机遇,但也充满挑战。
相对而言,在系统的兼容性方面,苹果在3大系统中最具优势。无论是iMac还是iPhone、iPad,“稳定、流畅没有兼容性问题”一直令人印象深刻,也是苹果设备如此受人追捧的一个重要因素。苹果始终坚持封闭系统,封闭的环境使得基于iOS开发的应用不管在何种硬件平台都能带给用户极好的体验,从而得到最大限度的推广,同时吸引大量的开发者为其工作。
苹果的这一优势有利于其迅速向新的智能端口布局,甚至不需要动太多的脑筋,只要将iPhone成功的经验复制过来就可以了。今年3月,苹果推出了iOS全新的车载系统CarPlay,它可使用户便捷地在汽车上操控自己的iPhone。
这并非一款真正的车载系统,却令苹果在新的智能化领域迈出了重要一步。而综合多方消息来看,iWatch、iGlass等产品的推出也指日可待。尽管目前苹果的产品发展思路略显保守,但“果粉”愿意为了优良的体验而等待,凭借统一的系统特性,苹果极有希望在未来新智能端口的争夺中占得先机。
老牌软件巨头微软一直在努力实现旗下系统的统一。如今一提起Windows系统,人们便会联想到三个不同的分支。除了针对传统的搭载Intel或AMD处理器的PC或笔记本之外普通版本Windows外,还有适用于智能手机的Windows Phone,以及用于ARM架构设备的Windows RT。然而,这种模式让第三方开发人员无法实现一次开发多平台,因而缺乏足够的吸引力。尽管过去几年,微软不断更新着各个平台上的Windows版本,使其趋于一致,但用户升级的热情并不高涨。好在今年4月,随着Windows 8.1版本第一次重大更新的发布,微软系统平台的统一终于有了实质性的进展,不但使第三方开发者和用户受益,也有助于微软将Windows推广到更多的智能终端,何况微软还拥有Xbox游戏机的成功经验。
与对手相比,互联网巨头谷歌缺少的恰恰是PC操作系统,而其在Chrome浏览器获得成功的基础上开发PC系统,也正是希望弥补这一短板。
在智能化的道路上,谷歌比战略保守的苹果和力不从心的微软都走得更远,它不但推出了谷歌眼镜,还针对可穿戴设备开发了Android Wear系统,并收购了智能家居公司Nest。这些举措表明,谷歌期望建立一个涉足全部智能领域庞大系统,虽然PC市场已经没落,但PC在云计算中仍是重要的一环。对谷歌来说,将为移动而生的Android移到PC端并不现实,因此在追逐智能化浪潮的过程中,Chrome具有同样重要的地位,而它也比Android更具有成为统一平台的潜质。
面向未来的系统
在一些业内人士看来,谷歌如此重视Chrome,与其天生的互联网基因有着重要的关系。对谷歌来说,Android的成功已经帮它赢得了现在,而Chrome则是面向未来的赌注。
任何时候,谷歌都是一家互联网公司,它开发的一切软件与硬件最终的目的是为了让用户更方便地接触互联网,使用自己的互联网服务。Android虽然火热,但它和大多数系统一样,都是将应用软件安装到本地使用,这有违谷歌云计算的初衷,Chrome OS则是完全基于Web技术设计的,通过浏览器来远程提供应用软件,使用Chrome系统就意味着你必须时刻与互联网相连,这更符合谷歌的云理念。
在谈及Chrome对于谷歌的重要性时,皮采表示:“作为我们在生活中需要越来越多可以连接的设备,Web在底层支撑了这些连接设备。Chrome和Web技术在我们连接设备的过程中扮演了重要的角色。”不难看出,在面向多个终端的发展战略中,Chrome承担着重要的使命。“我认为Chrome发挥着举足轻重的作用,远比大多数人想象的要大……作为一个Web技术的支撑载体,它将确保‘多屏世界’中的屏幕互相协调协作,为用户的工作提供保障。”皮采说。而桌面仍然在谷歌的业务中占据很大的比重,谷歌会加大Chromebook的推广力度。
有分析认为,Chrome才是谷歌真正想要开发的系统,Android虽然很成功,但它也面临着各种各样的问题,例如开源的特性导致的碎片化,以及与苹果旷日持久的专利大战,这些都不利于它未来的发展,很可能最终会被Chrome取代。不过,皮采并不这么认为,他强调谷歌同时拥有的Android和Chrome这两大平台将会形成互补,共同解决用户所关注的问题。当然,也不排除未来谷歌会重新整合Android与Chrome两大系统,创造更为完美的用户体验。
Android客户端 第3篇
1.1 Android开发技术。Android是由Google和开放手机联盟共同研发的一款智能操作系统, Andorid主要应用于智能手机以及其他智能设备。Android拥有其他智能操作系统不能相比的开放性和可扩展性, 它的出现引领了一股硬件智能化潮流, 目前已经是世界上用户最多、影响力最为广泛的、发展前景最好的嵌入式设备智能操作系统, 尤其是在上网本、机顶盒、全球定位设备、车载设备、电视机等智能设备中被广泛运用, 并且处于垄断地位。Android系统给智能设备带来了全新的理念, 给用户提供了更为完美的体验, 而且由于IOS不开放的原因, Android不单只是现在, 而且在未来很长的一段时间里, 都将垄断除智能手机以外的其他任何种类和领域的智能设备。
就目前较流行的Android系统版本, 分别有Android1.5 (Cupcake) , Android2.2 (Froyo) , Android2.3.3 (Gingerbread) , Android4.0 (Ice Cream Sandwich) , Android4.1/4.2.2 (Jelly Bean) , Android4.4 (Kit Kat) , 而在本文中则运用android4.0版本。
1.2 Android系统框架。Android的系统分层可以分为四层, 从上层到下层分别是应用程序层, 应用程序框架层, 库文件层, linux内核层。我们使用的Android应用就是运行在应用程序层上的, 而Android应用需要调用的API和系统服务是由应用程序框架层提供, 这一层封装了Android所有的Java代码和对外接口, 库文件层则是Java代码与C代码之间的桥梁, 最后的linux内核层就是最底层的硬件驱动。
1.3 Android应用程序。Android有活动、后台服务、数据共享和广播四大组件, 在本文设计中应用到Activity组件。该组件的运行周期分为:第一种情景, 当活动首次建立时, 首先运行on Create () 方法, 启动后运行可见但不可交互的on Start () 方法, 接着运行使用者可视同时可控的on Resume () 方法;第二种情景, 当活动退出时, 首先调用on Pause () 方法, 继而调用不可见并且不可交互的on Stop () 方法, 最后调用on Destroy () 方法, 来实现销毁活动, 回收内存资源;第三种情景, 当当前活动处于栈顶的位置而被其他活动占用时, 当前活动先执行on Pause () , 继而调用on Stop () , 当被暂停的活动继续回到栈顶时, 马上开始运行on Restart () 方法, 紧接着运行使用者可视并且可控的on Resume () 方法回到协议栈顶。
1.4 Android的JNI、NDK技术
1.4.1 Android JNI技术。JNI (Java Native Interface) 标准并不是Android特有的, 它是java中的一项技术, 它可以让使用Java语言或者其他语言写的代码进行交互, 包括数据的交互和相互间的调用。JNI使得在JAVA虚拟机中运行的Java程序能够与其他开发语言比如C, C++, 汇编语言编写的应用程序和库进行交互操作, 我们知道Java虚拟机是用Native语言编写, 虚拟机运行在具体的平台上, 虚拟机本身无法做到和平台无关, JNI可以对Java层屏蔽掉不同的平台产生的不同的差异, 主要是通过映射的方法来实现, 这样就能实现Java本身平台无特性, Android中JNI就是一座将native层和java层联系在一起的桥梁。
1.4.2 Android NDK技术。NDK是工具的集合, NDK中有很多的工具, 可以帮助Android开发者迅速开发出C/C++的so库文件, 并能自动将so库文件和java应用一起打包编译成apk安装文件, NDK集成了交叉编译器, 提供了mk文件来配置NDK的编译设置, 可以用来隔离CPU、平台、ABI等差异, 作为开发人员只要修改mk文件就可以编译生成需要的so库文件。NDK的发布, 使得java+C的开发理念正式上线, 成为了一种官方支持的开发方式, NDK为开发人员带来了以下好处: (1) 开发人员可以使用C/C++开发要求有高性能的应用逻辑, 从而提高应用程序的效率。 (2) 开发人员可以使用C/C++开发不公开的、保密的应用逻辑。 (3) NDK是Android平台支持C开发的开端, 众所周知, 因为C/C++语言具有可以直接操作内存的特性, 故C/C++语言相对于java语言来说具有更高的执行效率, 如果Android程序可以发展为以C/C++语言为主要开发语言的话, 那么可以大大改善Android系统“吃”硬件的情况。
NDK开发的大概流程为, 首先是环境搭建, 搭建完毕就在java中定义java native本地方法, 创建好方法后在cmd命令行用javah编译出用于c/c++层调用的头文件里面封装了java的本地方法的声明, 这样在c/c++层重写此方法, 用Android.mk文件编译成动态库的形式, 最后在java层就可以加载动态库, 调用封装好的带参数或者不带参数的本地方法来实现c/c++层的数据信息的获得。
二、android客户端软件程序设计
本文中android客户端的软件设计的框架流程如下图1所示, 我们可以看到它由用户欢迎登录界面、百度地图KEY的申请、验证和检测、北斗移动设备的实时定位显示以及百度地图特有的离线地图下载几个大部分组成。
其中欢迎登录界面采用固定username和password的模式;KEY的申请可以通过百度地图api提供的KEY申请接口申请;对于网络的检测、验证方式的设置在本文中是通过单独封装在一个MKGeneral Listener类中重写的on Get Network State (int i Error) 方法来完成、实现的, 同样在重写的on Get Permission State (int i Error) 方法中实现KEY的检测和验证。
在对北斗移动设备的实时定位显示由显示需要用到的资源的加载、实时位置信息的请求和位置信息在百度地图上显示三块组成。
android客户端设计的核心模块实时位置定位显示的详细实现, 在程序的刚开始必须先对地图管理类BMap Manager进行初始化, 接着用set Content View (R.layout.activity_main) 去加载地图显示的布局文件和一些资源, 以及一些用到的控件的初始化和事件的监听, 在本设计中设置了2D地图和卫星地图显示的两个选择按钮;然后用m Map Controller=m Map View.get Controller () 去获取Beidu Map控制器继而对其像Map的缩放级别等属性进行设置, 之后接着去构建地图显示MKMap View Listener的接口、类, 并重写地图加载过程中用到的如on Get Transit Route Result () 、on Map Load Finish () 等方方法, 接下来自然而然地调用reg Map View Listener (Demo Application.get Instance () .m BMap Manager, m Map Listener) 方法在用户地图显示的监听器;在完成这些操作之后我们就可以成功的将百度地图加载到Map View控件上显示出来, 但我们的要求是北斗移动设备的实时定位和详细位置描述, 所以我们还要构建覆盖物弹出窗口Popup Overlay图层和位置服务搜索MKSearch实体对象并初始化, 初始化时还需要构建MKSearch Listener () 实例对象, 当调用MKSearch的reverse Geocode (p) 去获取具体详细的地址信息时, 我们就能在MKSearch Listener实例中重写on Get Addr Result (MKAddr Info arg0, int arg1) 时运用arg0.str Addr来获取到具体某一点在百度地图上的详细位置信息。
完成以上的初始化准备工作后, 接着就可以开启一个线程每隔1s向远端云服务器完成请求获取实时经纬度位置信息和时间。要实现这块首先要构建Http Client对象, 运用Http Get ("http://192.168.1.103/maps/Web Service/get Location.php?id=1") 方法向服务器发书GET方式连接、数据请求, 当链接请求被服务器所受理后就可以使用Input Stream Reader字符流去获取服务器查询返回的JSON格式数据, 紧接着在得到数据后构建JSONObject对象去解析JSON数据。将拿到具体的位置信息和时间放到Hashtable容器中通过Handler异步消息机制的send Message (msg) 方法发送给主线程实时标注到地图上。
主线程拿到数据后首先用Geo Point ( (int) (lat*1E6) , (int) (lon*1E6) ) 方法得到一个位置点, 接着通过Coordinate Convert.from Gcj To Baidu (p2) 方法矫正, 同时使用reverse Geocode (p) 获取该点在地图上的详细位置信息, 然后构建并初始化Itemized Overlay图层把该点标注到地图上, 同时弹出该点的位置信息描述窗口, 最后将该点设置为中心显示并刷新地图, 这样我们就实现了对北斗移动设备在android客户端端实时的在线定位。
三、android客户端测试与分析
android客户端登录界面的测试, 其中的“远程定位登陆入口”采用字体闪烁来达到强调的效果, 还有使用文字跑马灯的形式给用户登录如用户名、密码以及故障紧急措施处理等一些温馨提示信息, 系统采用的是beidou和007固定的用户名和密码登录。准确输入用户名和密码, 然后点击登录按钮, 在登录成功界面上, 可以提供给用户北斗移动设备在线实时定位入口和百度地图的离线下载地图的功能入口。
实时在百度地图上定位显示功能测试, 登录成功后, 点击“北斗移动设备在线实时定位”选项进入到实时定位显示界面, 接着我们就可以通过按键选择地图显示的类型。在本文设计中, android客户端有2D和卫星地图类型两种不同的地图类型显示 (如图2所示) 。
图中我们可以明显看到无论是在2D地图还是卫星地图上都能正确的在百度地图上显示北斗移动设备的实时位置, 而且还能正确的标注显示出该位置的详细位置描述和授时时间。其中定位的误差是在可控范围之内。
参考文献
[1]黄伟敏.Android平台的即时通信系统客户端设计方案[J].现代电子技术, 2011, 16 (34) :140-142.
[2]王晓湘.差分GPS定位精度研究[J].北京邮电大学学报, 1999, 22 (4) :25-29.
[3]郭庆涛, 孙强强, 李永攀, 等.高性能网络服务器框架的研究与实现[J].计算机工程, 2013, 39 (12) :70-74.
Android客户端 第4篇
软交换技术是21世纪初发展起来的一种新的交换控制技术,用于取代传统的电路交换,它能够把业务和媒体分离,使得每一项业务都能够独立出来,方便开发、扩展和维护[1]。Vo IP(Voice over Internet Protocol)是在互联网的基础上建立语音通话,SIP(Session Initiation Protocol)协议作为一种多媒体通信的信令协议,支持网络电话、多媒体会议等形式的会话,是软交换通信的重要桥梁。在当前的移动互联网时代,Android凭借其开源免费的特性,已经在市场上占据了半壁江山[2,3]。
在目前常见的电话销售系统和客户服务系统中,电话部分与销售业务或客服业务是分离的,其中很多电话语音设备依旧采用传统的电路交换设备,电路交换设备需要一定的硬件设备,如固定电话机、SIP电话机等,因此传统的电话系统存在硬件成本过高、终端受场地限制、不易携带等缺点[4,5]。销售业务或客服业务部分需要记载商品、物流、客户等一系列信息,这就需要一台可输入的智能设备来完成。采用Android手机APP替代传统的席位系统,利用Wi-Fi或者4G网络打破线路限制,实现通话和业务的便捷,其中的销售业务直接由手机APP下单,客户等相关信息直接利用手机输入,简化操作流程。
1 需求概述
从通话和销售下单的角度看,系统应具备以下功能:
1.1 语音通话功能
电话销售是基于语音通话展开的,要求系统支持普通语音通话和SIP语音通话,包括拨打和接听,其中SIP语音通话能够支持其他SIP通话终端,即客户采用其他SIP通话系统也能与系统通话,做到SIP的兼容性。
1.2 通话记录和录音功能
在信息系统中,信息的保存是非常重要的,通过对信息的挖掘可以拓宽自己的业务。通话过程中,系统会自动对其录音,通话时间、通话类型、通话时长等通话信息也会自动保存。以上信息在本地端保存成功后,将会同步到服务器端。
1.3 销售功能
电话销售系统中,销售是核心功能,普通电话系统通常是对客户提供客服业务,系统在提供客户服务业务的基础上,添加了销售功能。在通话过程中,如果客户需要购买商品,员工可以帮助客户下单,实现电话销售功能。
1.4 客户管理功能
客户的信息对于企业和员工是非常重要的,根据客户的信息,员工可以向其推荐感兴趣的商品。因此,员工可以查看自己的客户群体、与客户的通话具体信息、自己的销售记录信息等,也可以对客户业务信息进行完善,方便以后查看。
1.5 统计与考核功能
员工每月的绩效都需要通过其工作情况进行考核,系统需要能够对员工每日通话次数和每日的销售业绩进行统计,这些统计信息需要采用简单明了的方式展现出来,同时也必须能够方便员工按月查询自己的统计情况。
2 系统设计
根据需求,系统总共分为语音通话、通话记录与录音、销售、用户管理和统计五大模块,这五个模块分别包含了若干子模块,具体的功能模块图如图一所示。
2.1 通话模块设计
通话模块是电话销售的基础模块,员工与客户的交流都是通过通话模块进行的。通话模块主要分为3个部分,即普通通话、SIP通话和客户通讯录。普通通话设计采用Android系统自带的通讯模块进行电话的拨打和接听,系统提供接口去调用。SIP通话采用软交换中的SIP协议作为基础,结合多媒体的G.711和H.264协议对通话语音进行数据的采集、处理,最后利用网络传输的UDP和TCP协议进行传输,SIP语音通话的时序图如图二所示。客户通讯录独立于系统自带通讯录,是员工专有的客户通讯录,里面包含了更多的客户信息,如客户的职位、收入范围等信息[6,7]。
客户通讯录数据项:{客户ID、姓名、性别、生日、固定电话号码、地址、电子邮件地址、手机号码、网络号码、职业、职位、工作单位}。
SIP通话是系统的核心功能之一,使用SIP通话前,需要向SIP服务器进行注册,系统设计采用一个SIP管理类对SIP服务器注册进行管理。与普通通话类似,SIP通话拨号需要一个对方的网络号码,客户通讯录设计中就包含了用户的普通电话、网络电话等信息。SIP通话拨号利用PJSIP接口进行拨号,系统对其进行了封装,方便直接对其进行呼叫。拨号过程中也将会对通话的信息进行记录,系统设计了一个通话记录类来辅助保存信息。SIP通话设计的类图如图三所示。
2.2 通话记录和录音模块设计
在日常通话中,手机都会记录通话双方的号码、通话类型、通话起始时间等基础信息,但这对于电话销售系统来说是不够的,系统在这基础上加入了同一号码通话次数、对方手机号归属地等信息,使得通话记录更加完善。录音是对通话过程最清晰的描述,员工根据录音可以为客户提供更好的服务,管理人员也能通过录音检查员工的工作情况[8]。因此,在通话过程中,系统会自动对通话进行录音,直至通话结束。通话录音的时序图如图四所示。
通话记录数据项:{通话单号、来电号码、去电号码、通话类型、通话开始时间、通话结束时间、录音文件名称、手机号码归属地、通话次数}。
2.3 销售模块设计
销售模块是系统的核心功能之一,它能给企业带来直接的利益。销售模块设计包含了业务记录和商品销售。业务记录是对客户的咨询、留言、售后等信息的记录,用于为客户提供电话客服服务。商品销售是帮助客户电话下单,在员工与客户创建了通话记录后,员工可以为客户提供商品购买服务,具体流程为员工选择事项为订货后,系统界面将会自动显示商品的选择栏,根据选择的商品可以自动的展现商品的基本信息和价格,员工在保存后会自动的创建商品购买订单,商品销售的时序图如图五所示。
业务记录数据项:{业务单号、客户ID、业务类型、业务事项、业务内容、创建时间}。
销售模块考虑到商品购买时能够快速下单,设计了商品销售类,商品销售类记录了商品销售的信息,提供了添加、修改接口;也提供了商品类,商品类包含了商品的信息;同样提供了添加和修改接口方便对商品信息操作。作为电话销售系统,每一次的商品销售必须与通话记录类绑定,保证每一个订单的所有信息都可查,也方便以后售后服务的支持。商品销售类图如图六所示。
2.4 客户管理模块设计
客户管理模块是针对客户信息的管理,员工在该模块中可以查看、修改客户的相关信息,客户管理模块包括了录音管理、短信管理、业务管理、通话管理和销售管理。录音管理是对员工与客户通话录音的管理,员工可以在里面播放自己所有的通话录音,了解自己完成的业务情况。短信管理可以查看自己与客户的短信记录。业务管理包含了业务信息,员工可以查看自己的业务信息,考虑到通话时间过短,员工记录不便,员工可以修改自己的业务信息,完善记录情况。通话管理包含了通话信息,员工可以具体的了解自己与用户的通话情况。销售管理是对销售信息的整理,员工可以查看自己的销售记录,了解每一位客户的爱好[9]。其中业务管理时序图如图七所示。
2.5 统计与考核模块设计
统计与考核模块是针对员工工作情况设计的,里面包含了员工的话务信息和业绩信息。话务信息对员工每月的电话情况进行统计,统计内容为每天的通话总数。业绩信息是对员工每月的销售情况进行统计,统计内容为每天的销售成功总数。统计采用折线图的方式展示,其中X轴以每月的天数为单位,Y轴以电话拨打的总数或商品销售的总数为单位进行绘制。其中话务统计时序图如图八所示。
3 系统实现与测试
3.1 开发与测试环境
系统的开发与测试平台如表一所示。
3.2 业务统计的实现
业务统计采用了在Github上开源的MPAndroid Chart图表组件来绘制折线图,MPAndroid Chart是目前最流行的图表组件之一,它能够绘制折线图、柱形图、饼图、雷达图等8种图形。相比其他绘图组件,MPAndroid Chart体积更轻巧,图形支持拖拽、缩放。
使用MPAndroid Chart前,首先引入相关的jar包到工程文件下,然后在布局文件加入组件,系统使用的折线图采用linechart组件。在代码控制组件时,首先是设置折线图全局的参数,包括X轴和Y轴的文字、线条、背景等。然后给组件设置数据源,MPA-ndroid Chart采用一个Entry实体类设置每个点的数据,再封装在Lin Date Set里面表示一条折线的数据,最后封装在Line Date里面表示所有折线的数据。业务统计的效果图如图九所示。
3.3 系统实现后的主界面
系统主要功能及其界面如图十所示。
3.4 测试
系统开发完成后,分别对其通话、信息记录、录音、业务等功能做了多组测试,具体测试结果如表二所示。
4 结束语
利用Android手机的移动便携性,结合电话销售行业的特点,实现了基于Android的电话销售软交换客户端,替代了传统的固定话机,并能通过手机实现商品购买,简化电话销售流程。系统经过测试,通话质量良好、运行稳定,能够在工作环境下使用。今后可以继续完善系统,加入更多销售功能,并移植到其他移动智能操作系统。
摘要:在Android智能手机操作系统已经普及的背景下,针对电话销售系统的不便利性,本文利用已经成熟的软交换技术,把PJSIP协议栈移植到Android平台上,设计并开发了Android手机电话软交换客户端,使之能够通过SIP服务器进行语音通话,加入电话销售功能,为客户提供购买、咨询、业绩统计和考核等功能。系统在经过测试后,通话质量良好,数据记录正常,达到预期设计目标。
关键词:Android,电话销售,软交换,客户服务
参考文献
[1]Srinivasan P,Shi G,Tangirala V,et al.Method and apparatus for performing soft switch of virtual sim service contracts:U.S.Patent Application 12/621,787[P].2010-12-9.
[2]Alliance O H.Android overview[J].Open Handset Alliance,2011.
[3]Liu J,Yu J.Research on Development of Android Applications[C].2011 Fourth International Conference on Intelligent Networks and Intelligent Systems.IEEE,2011.
[4]陈晨.电子商务环境下的客服管理系统的设计与实现[D].武汉:华中科技大学,2012.
[5]郭鹏.企业电话客服系统设计与实现[D].北京:北京邮电大学,2011.
[6]林辉.基于SIP的嵌入式Android Vo IP语音终端的研究与实现[D].广州:华南理工大学,2012.
[7]刘恒旭.基于Android平台的SIP客户端系统的设计与实现[D].成都:西南交通大学,2012.
[8]林健浩.基于SIP协议的音视频会话技术研究[D].广州:广东工业大学,2014.
[9]于颖娟.基于Web Service技术的寿险电话销售系统的设计与实现[D].北京:中国科学院大学(工程管理与信息技术学院),2015.
[10]桂海源.IP电话技术与软交换(第2版)[M].北京:北京邮电大学出版社,2010.
Android客户端 第5篇
1 XML 解析技术的选择
XML是W3C制定的一组规范 , 用来定义标记语言 , 其主要优点是可扩展性, 从它的诞生到现在, 已经得到了人们广泛的支持与应用[5]。所谓XML文件的解析是指 : 把代表XML文档的一个无结构的字符序列转换为满足XML语法的结构化组件的过程[6]。Android支持3种解析技术: DOM、SAX和XMLpull。Android平台选用何种解析技术主要取决于3个方面的因素: 移动设备内存的大小、XML文档的大小、以及移动应用程序中解析文档的主要用途[5]。
基于Android的车辆定位系统中, 虽然每次交换的数据量不大, 但积累量非 常可观 , 因为要持 续处理与 收发XML数据, 所以要求有很高的响应与处理速度。同时因为设备的资源比较宝贵, 所以需要选择适合的技术来解析XML, 这样有利于提高访问的速度。文献 [6] 对3种解析技术做了详细的比较。本文选择SAX方法来进行研究。
2 数据处理流程分析
整个车辆定位系统有4部分组成: 分别为车载终端设备、中心服务器、安卓智能手机以及百度地图服务器[2]。本客户端可运行于智能手机或其他安卓设备。需要获 取车辆信 息时 ,依据中心服务器提供的帐户和密码登录。登录成功后, 启动手机地图, 同时将用户信息封装并发送到中心服务器, 服务器捕获到请求后将相应车辆信息发送给客户端。客户端获得车辆信息之后, 解析数据, 在界面适当位置显示的同时, 根据解析得到的经纬度在地图上标示出车辆所在位置。客户端一次数据处理流程如图1所示。
3 XML 数据解析技术
本客户端在地图显示主界面, 设计一个按钮负责用户信息的发送, 同时启动监听接收服务反馈信息线程, 在线程中采用Handler技术启用解析过程, 将解析的结果赋予全局变量, 再由地图监听线程捕获, 完成显示和定位。与解析过程相关的主要技术包括按钮监听、服务器监听、解析。
4 结语
Android客户端 第6篇
随着手机软、硬件产业和移动互联网的发展以及人们生活水平的提高,人们越发关注健身信息并加强体育锻炼,以提升自身的身体素质,更好地适应社会发展。据中国报告大厅网的《2013-2014年中国手机/智能手机市场研究年度总报告》[1]和中商情报网的《2012-2016年中国智能手机市场调查及发展趋势研究报告》[2]预测分析,2015年全球智能手机用户将达到19.1亿,2016年该指数将增长12.6%,达到21.6亿。这表明Android智能手机需求呈现暴涨趋势,而国内Android智能手机市场也前景大好。目前Android手机应用市场中,既满足社交娱乐又能及时关注健身运动信息的手机客户端十分缺乏,而且现有的类似应用都不能同时满足这一需求。Android平台具有免费开源性、易移植性、普遍性、操作简单等优点,因而广受商家与开发者的亲眯[3]。鉴于此,本文基于Android平台,设计了一款集娱乐健身为一体的手机客户端。
1 Android介绍
Android是一个以Linux平台为基础的开源的移动设备操作系统,由Google推出,主要应用用于智能手机和移动PC中。其大致可以分为四层架构、五大区域,其四层架构分别为:Linux内核层(Linux Kernel)、系统运行层、应用框架层(Application Framework)、应用层(Applications)[4,5,6]。客户端基于Android系统之上,以Eclipse、Android等集成组件为开发工具,Java等语言为开发语言,要进行软件应用开发,需先搭建好Android开发环境[7]。
2 系统总体设计
以Openfire+Spark为服务器端、Tomcat为数据存储管理器,利用ThinkAndroid、Xutils、Volly等较为实用的框架,以最小成本设计出一款集娱乐健身为一体的手机应用软件。该系统设计主要分为界面层、数据处理层、服务器层、功能层。界面层主要有登录注册界面、主界面、功能界面等;数据处理层主要完成界面层与功能层之间的数据交换与储存等;服务层主要实现客户端与服务端的网络通信请求和数据处理等;功能层实现该客户端各界面逻辑功能及界面相互跳转等。客户端与服务端采用Socket连接方式进行网络通信,用来实现用户登录注册等功能;借助Asmack聊天框架进行消息收发,实现服务器端信息的主动推送;基于ThinkAndroid、Xutils框架,使用httpUtils断点下载;利用Volley框架中的BitmapUtils进行异步图片加载,优化显示好友列表等;借助百度地图SDK[3]和GPS实现定位功能。基于GSP与GIS技术,监测用户运动速率是否超过阀门值(反应速度[13]),以限制用户在运动时能否使用聊天功能,同时能根据用户权限进行群聊与私聊。
2.1 系统框架
采用单例[8]、工厂设计[9]、观察者、MVC[10]等设计模式构建,可实现界面层与功能层以及数据处理层的分离,使得系统具有良好的松散耦合度,便于后期代码维护等。界面层采用自定义XML文件方式进行设计,有助于代码重用,提高程序运行效率;数据处理层使用Content Provider类能有效屏蔽系统底层存储的细节信息,从而使应用系统具有良好的数据迁移性[6]。本客户端总体设计框架如图1所示。
2.2 服务器层
服务器采用B/S结构,使用html、js等编程语言完成服务器端各功能接口的实现,而客户端服务器只需搭建Web服务器端,使用对应接口进行访问。客户端请求的数据操作,最终将会在该层完成并将最终结果返回给客户端。客户端使用Openfire搭建,采用Spark并利用Smack(主要实现XMPP传输协议[11,12])实现与服务器端的交互。
2.3 数据处理层
系统采用Tomcat存储用户注册登录信息和即时通讯信息等。该层与服务器层相互通信,处理界面层有关请求,并将处理结果返回到对应界面,存储界面层提交的用户信息和功能层的状态与处理信息等。
2.4 界面层
界面层包括登录注册界面和主页面。登录注册界面采用相对布局模式,使用文本框、输入框等,进行相应属性设置,最终完成登录注册界面搭建。主界面以LinearLayout线性布局嵌套线性布局,加入相应的控件并设置有关属性,编写MainFragmentActivity类继承FragmentActivity类完成主页面设计。其它界面布局大致上都是按照以上两界面布局方式实现。
2.5 功能层
本客户端在功能层界面主要实现注册登录、群聊与私聊、图片与文字消息发送和接收、语音录制与播放,以及添加好友、发表话题、查看附近人、运动定位等功能。在注册登录功能中,需给用户加上权限,现实与其他权限用户进行群聊与私聊。功能层的实现必须和界面层、数据处理层及服务器层相互通信才能完成。依据功能需求,在功能层中实现各界面需要实现的功能。
3 客户端模块设计
Android应用框架分为两大类,一类是Android系统自带应用开发框架,另一类是第三方框架。第1种Application Framework框架由Linux Kernel、Android Runtime、Libraries、Application Framework、Applications这5部分组成;第2种是项目中引用第三方框架。而本客户端引用Xutils、Asmack、PullToRefresh等第三方框架。客户端整体模块如图2所示。
根据图2可将本系统分为两大模块:登录注册模块和主模块,主模块又分为“运动”、“发现”、“消息”、“个人”4个模块。当用户首次使用本客户端时,必须先进行注册才能使用。注册登录访问服务器端时采用的是即时通信XMPP协议,XMPP是基于XML的网络及时通信协议;而与系统进行通信的信息都是以XML语句进行传输,具体的消息内容则嵌入在XML元素中[12]。
3.1 模块整体布局
考虑到屏幕适配与布局简洁易维护等问题,四大模块整体布局均采用线性布局方式,在各自布局XML中嵌套其它布局和所需控件,在自定义Fragment类中初始化这些控件,并且实现相应的逻辑功能。采用线性布局的优点在于各子元素彼此连接,中间不留空白。可通过两种方式布局,通过android:orientation属性设置线性布局方式。
3.2 客户端主模块流程设计
主模块流程设计应以需求和用户体验为主。本文主模块设计流程如下:(1)分别自定义一个主布局和4个layout布局;(2) 设计好4 个Fragment类;(3) 编写MainFragmentActivity类,添加第一个默认Fragment用于初始显示界面,并对各按钮设置监听事件,用于视图切换等。“运动”、“发现”、“消息”、“个人”,4个模块均采用以上流程进行设计,但仍然存在差异。其中,运动模块借助百度地图开发SDK实现定位等功能、发现模块与个人模块采用设置不同监听事件来实现界面跳转等、消息模块采用TCP协议并且借助Asmack聊天框架进行消息收发。
3.3 客户端主类的设计
主模块中主类的设计思路是采用自定义MainFragmentActivity类继承FragmentActivity类,四大模块类均采用自定义fragment类继承Fragment类,并将4个自定义Fragment通过FragmentManager管理器与FragmentTransaction进行动态添加与替换等,最后调用commit()方法实现界面交换。四大自定义Fragment类的设计均采用的设计思路是初始化控件、访问服务器接口、给有关控件设置监听事件来实现相应的逻辑操作。
4 客户端主要功能
本客户端APP主要包括用户注册登录、运动定位与轨迹显示、发表话题、群聊与私聊、添加好友、退出系统等功能。主要功能界面如图3、图4所示。
(1)用户注册登录。服务器获取用户在注册界面提交的注册请求,服务器处理该请求并返回相应处理,客户端显示是否注册成功,若注册成功,则将用户注册信息保存到服务器中,并给予用户相应权限。用户依据注册帐号在登录界面向服务器发送登录请求,待服务器处理后返回结果。
(2)运动定位。如图3所示,在联网状态和给予定位权限下,用户使用运动记录等功能时,能定位当前用户所在地,并记录用户的运动时间、运动时速和运动距离,描绘出运动轨迹等。
(3)添加好友。进入附近界面,当用户向服务器发送请求,服务器依据用户权限等,先判断该用户是否在线,若不在线,则将信息保存;若在线,则将处理结果发送给Spark客户端,客户端处理好友请求后,将最终结果返回给服务器,最后在Android手机客户端显示。
(4)群聊与私聊。如图4所示,根据用户权限,选择合适对象进行群聊与私聊。聊天过程中用户可发送文字、表情、图片、语音、地图等。当用户在运动过程中使用聊天功能时,系统将监控用户运动时的速率是否在阀门值(正常人反应速率)内,若超过阀门值,系统将弹出信息提示使用者注意安全,10s内将锁屏来阻止用户继续使用聊天功能,实现智能提醒用户注意人生安全。
(5)发表话题。进入运动圈界面可分享用户喜欢的健身信息作为发表的话题,其内容可含文字、图片等,提交发表请求后,等待服务器处理结果并显示用户成功发表的信息。
5 结语
本客户端在满足人们交友聊天需求的同时,又能将运动健身信息通过手机移动设备终端与他人分享。相比目前应用市场中交友或健身类的APP应用,其优势在于结合交友与健身手机应用两者的优点,设计与实现了一款娱乐健身客户端。在满足用户健身信息交互的前提下,又能满足社交功能。在聊天与运动定位功能实现中,从用户人生安全角度去设计程序,智能提醒使用者注意运动时的人身安全。此外,本客户端具有较大的开发与应用价值,在界面设计与功能方面都具有较大的开发及应用空间,比如植入广告、添加商城等,从使用者安全角度进行优化设计,对运动状态下群聊与私聊等进行监控。
摘要:随着移动互联网的迅速发展和智能手机的日益普及,人们对于健身、娱乐等的需求不断增加。基于Android平台,设计一款酷跑手机客户端,实现用户注册登录、好友添加、运动定位、运动量统计、健身信息分享等功能。从用户人生安全角度设计程序,实现依据用户权限进行群聊与私聊,并监测和比较用户运动速率与阀门值(反应速度),达到智能提醒用户运动时注意人生安全的目的。
Android客户端 第7篇
为提升用户体验以及程序健壮性, Android2.3 (版本序号为9) 以后版本所有的联网操作均不能在UI线程中进行, 必须在新建线程中进行网络连接。例如在按钮事件中直接编写联网代码, 将会显示“NetworkOnMainThreadException”。在Android可视化移动应用软件开发中经常需要根据网络数据修改相应的UI组件, 但所有与网络连接有关的代码 (Socket对象的创建、HttpClient对象的execute方法的调用等) 都需要在从线程中进行, 必须通过线程之间的通信, 将消息发送至UI线程进行处理。通过从线程修改UI控件, 可以在相关界面类中添加数据处理方法, 进行线程通信编码, 并在从线程中进行调用。这样可以实现系统功能, 但该设计不符合面向对象设计思想, 代码的可重用性低、耦合度高[1]。本文在面向对象开发思想的基础上, 利用多线程技术、Android线程间通信机制并结合相关设计模式, 研究设计一个安全可靠的TCP/IP客户端通信模块, 有效解决上述问题。
1 通信系统设计
1.1 系统通信模式
本文实施模型为家畜养殖智能监控系统, 该系统需要对环境数据实时采集并通过服务器端对下位机进行控制, 而Client/Server是一种较为可靠且及时的计算与通信模式[2,3,4], 本文采用C/S通信模式进行设计。系统通信架构如图1。
1.2 Android Socket类
socket指“套接字”, 是一种抽象层, 应用程序通过它来发送和接收数据。使用socket可以将应用程序添加到网络中, 与网络中的计算机进行通信。不同类型的socket与不同类型的底层协议族以及同一协议族的不同协议栈相关联[4]。本研究只涵盖TCP/IP协议族的内容。AndroidAPI的Socket类主要封装了IP、端口号等信息, 其编程主要包含两种通信方式, 即TCP和UDP[4,5]。由于TCP通信方式更为可靠, 适用于读取实时数据及实时控制, 本文采用TCP方式实现信息传输。
1.3 异步消息处理机制
采用TCP连接的C/S通信模式一般是基于连接的, 也就是说在正常情况下客户端和服务器端的连接是不中断的, 服务器端可以接收客户端提交的数据并作相应处理, 也可主动向客户端发送数据[3,4,5,6]。由于服务器可以主动发送数据, 且其通信方式是基于连接的, 一对套接字要负责各种数据的传输, 无法确保接收的数据与发送的请求相对应。所以在C/S模式中数据的发送和接收是异步进行的, 一般至少需要两条线程对通信进行维护, 同时为了确定所接收数据的用途, 开发人员需要自定义数据交互的应用层协议[6,7]。
2 利用多线程实现异步通信
2.1 Android多线程技术
一个优秀的可视化应用程序应具有运行效率高、响应快、用户体验及人机交互性较好[8]的特点。要实现上述功能特点, 要实际开发中工作量大且操作较为耗时 (诸如文件I/O操作、网络通信以及数据库大批量操作等) , 若将这些操作放置在UI线程中进行会影响用户界面的流畅性, 用户体验较差, 也不利于程序高效率执行[9]。所以Android中广泛应用多线程, 一些耗时操作均放置在从线程中进行处理, UI线程只负责启动这些从线程。
2.2 利用多线程启动通信线程
利用多线程启动通信线程步骤如下: (1) 点击“连接”按钮, 启动连网线程; (2) 在连网线程中初始化套接字, 并连接服务端; (3) 连接成功后, 循环侦听网络数据, 在获取数据后进行解析, 并采用相应的方法处理。通信线程算法分析如图2所示。
2.3 通信线程与UI线程交互
通信线程通过网络I/O流得到数据后, 按照一定的格式进行解析, 然后调用对应的Activity类或Service类中定义的方法进行处理。但这些处理方法中无法直接修改UI控件, 只能在UI线程中对UI控件进行修改, 因此需要将处理好的数据传递给UI线程, 由UI线程根据接收的数据修改UI控件。
Android应用启动时默认为UI线程创建一个消息队列。要实现UI线程与从线程的信息交互, 可以使用Handler类向UI发送消息, 当调用sendMessage () 方法时, 可以向UI线程的消息队列添加消息, UI线程处理此消息[10]。具体的Android异步消息处理机制本文不进行赘述。
客户端连网线程接收到来自服务器端的数据后, 首先反序列化并解析数据, 得到数据协议部分。根据协议查找对应的目标类 (例如Activity类) , 并调用该类中定义好的方法对数据进行处理。为实现以上算法, 可以在Activity类中添加Handler类型成员变量, 并添加相应的方法, 在该方法中调用Handler对解析后的网络数据进行处理。通信线程与UI线程交互算法如图3所示。
2.4 通信模块算法流程
结合2.1和2.2分析, 绘制模块执行算法流程如图4所示, 在客户端点击连接按钮后, 经过一系列初始化操作, 创建连接线程并启动。在线程连接过程中, 根据设定的IP及端口号创建套接字A, 利用该套接字与服务器进行TCP连接。建立连接后, 服务端也会创建一个套接字A_与A对应, 然后启动一个专门维护该套接字的交互线程, 在该线程中利用套接字A_与客户端通信。客户端接收数据后, 分析数据协议部分, 根据协议规则在公共数据区找到对应的Activity类, 并通过该类向UI线程发送消息。
3 MEDIATOR (中介者) 模式设计模块通信框架
利用多线程实现异步通信, 如果要对不同协议的数据进行分发, 需要在各Activity类中定义处理方法。此设计各对象之间需要显式的互相引用, 耦合度较高, 且代码可重用性较低, 不符合软件工程规范。中介者使各对象不需要显式互相引用, 从而使其耦合松散, 而且可以独立地改变彼此之间的交互[11,12]。本模块中, 需要接收网络数据的各对象 (例如Activity实例) 为同事关系, 通信线程即为具体中介者, 一个Handler对象可以作为交互中介, 它负责具体中介者与同事间的通信。本设计主要解决接收网络数据, 并由具体中介者向对应的同事对象进行转发, 同事对象间数据的交互暂未讨论。本文对中介者典型对象结构进行适当的修改以适应本模块的设计需求。
如图5所示, 通信线程接收到消息后, 中介者接口在调度信息表中选择适合的handler, 通过中介者与Activity、Service类对象实现交互。为实现上述设计, 可专门定义通信处理器类SocketProcessor (类图设计如图6) , 定义connect () 方法负责启动通信线程, 并在该类中添加调度信息表handlers。定义接口方法transmitData (String data) , 当通信线程接收到数据时即调用该方法与目标对象交互。为提高程序的健壮性, 减小系统资源开支, 定义方法静态方法registHandler (String key, Handler handler) 、unregistHandler (String key) 分别用于向调度信息表 (handlers) 中添加和移除handler。
调度接口 (transmitData (String data) ) 算法:
框架使用方法:
(1) 在需要接收网络数据的Activity类中定义handler对象aHandler, 并初始化, 编写相关逻辑代码。
(2) 在Activity类启动或重启时注册aHandler, 在Activity类onResume () 方法中通过调用SocketProcessor.registHandler () 方法向SocketProcessor.handlers添加aHandler。
(3) 在Activity类暂停或停止时移除该handler, 在Activity类onPause () 方法中通过调用SocketProcessor.unregistHandler () 方法将aHandler从SocketProcessor.handlers中移除。
通信框架算法分析 (算法流程见图7) : (1) 调用SocketProcessor.connect () 方法, 启动通信线程, 完成与服务端的连接, 并不断监听来自服务端的网络数据; (2) 收到网络数据后进行解析, 获取协议部分, 根据协议部分找到对应的中介者, 调用该中介者处理网络数据; (3) 当目标对象 (Activity、Service等对象) 启动后注册中介者 (handler) ; (4) 目标对象暂停或结束后移除handler。
利用改进后的通信框架对家畜养殖智能监控系统的实时监控功能进行了实现 (见图8、图9) , 根据测试结果 (见表1) 及实际使用情况分析, 该框架数据交互效果较好, 数据获取及时可靠, 性能稳定, 完全符合系统需求。
4 结语
本文在阐述系统架构及通信方式的基础上, 对Android网络编程的特点及相关API进行了分析, 探讨多线程技术在Android网络编程中的应用, 对利用多线程技术实现系统通信模块的算法过程进行了分析。然后, 利用中介者设计模式设计了通信模块框架, 有效降低了各对象间的耦合度, 提高了模块的健壮性, 各目标对象 (Activity、Service等) 在该框架下可以较好地协同工作。最后, 通过该框架的实施验证了其具有较高的可靠性及稳定性。模块框架设计为Android开发者提供了一个较好的TCP/IP通信解决方案。该模块能很好地实现移动客户端与服务端之间的信息传输, 可相关研究和实际应用提供参考借鉴。
摘要:利用Java多线程以及线程间通信技术实现TCP/IP异步通信存在耦合度较高、模块可重用性低等弱点, 采用中介者设计模式进行改进并设计TCP/IP客户端异步通信框架。在家畜养殖智能监控系统的通信模块中对该通信框架进行了验证。结果表明, 采用该框架设计的通信模块响应及时、性能稳定。
关键词:异步通信,框架设计,套接字,多线程,设计模式
参考文献
[1]张海藩.软件工程导论[M].北京:清华大学出版社, 2006.
[2]彭凤凌.Android手机与内网PC通信系统的设计与实现.计算机工程与设计[J].2013, 34 (7) :2333-2337.
[3]STEVENS WR.TCP/IP illustrated volume 1:the protocols[M].Beijing:China Machine Press, 2011.
[4]CALVERT KL, DONAHOO M J.TCP/IP sockets in Java[M].Beijing:China Machine press, 2009.
[5]何进, 谢松巍.基于Socket的TCP/IP网络通讯模式研究[J].计算机应用研究, 2001 (8) :134-135.
[6]WRIGHT GR, STEVENS WR.TCP/IP illustrated volume 2:the implementation[M].Beijing:China Machine Press, 2010.
[7]STEVENS WR.TCP/IP illustrated volume 3:TCP for transactions, HTTP, NNTP, and the UNIX domain protocols[M].Beijing:China Machine Press, 2010.
[8]孟祥旭, 李学庆.人机交互技术——原理与应用[M].北京:清华大学出版社, 2004:61-63.
[9]纪晓阳.线程在Android开发中的应用[J].软件, 2013, 34 (8) :24-26.
[10]黄蓉.Android消息处理机制研究[J].黑龙江科技信息, 2012 (33) :87.
[11]RICHARD EG, RALPH H, JOHNSON R, et al.Design paterns:elements of reusable object-oriented software[M].Beijing:China Machine Press, 2013.
Android客户端 第8篇
该文在Android平台的移动终端下, 设计开发了一个借助在校大学生学号信息实现实名注册的高校网上跳蚤市场应用软件, 极大地提高了交易的可靠性。通过登录个人账号, 可随时管理个人主页信息的发布与收藏。另外, 在这款软件中具有物品分类选项, 加上个人对交易物品的文字描述和图片展示, 更加方便同学们寻找自己需要的物品。相比传统的二手交易方式有着更加强大的功能, 在全国高校内具有很大的实现和使用价值。
该文主要说明了软件架构设计、总体功能结构设计以及软件实现。
1 软件总体设计
1.1 软件架构设计
“高校网上跳蚤市场”由客户端和服务器端结合。客户端主要负责与用户进行交互, 完成注册、登录、发布物品信息等操作;服务器负责对用户的请求进行处理, 并在客户端和数据库之间传输数据;客户端与服务器则通过服务器接口进行相互通信[1]。
1.2 总体功能结构设计
为了满足用户需求, 制定如下功能模块, 各功能模块如图1所示.
2 软件实现
2.1 服务器
服务器提供一个API接口, 当客户端发来请求时, 服务器会把请求中的字符串转化成json格式的数据字段, 然后根据请求字段中的type来转入相应的程序流程处理请求[2]。
(1) 用户注册。
用户注册会接收参数sno (学号) , school (学校) , password (密码) , qq (qq号) , moblie (联系电话) , user Name (用户昵称) 六个参数, 然后根据学号和学校查询未注册用户表中的用户, 将查到的用户从未注册的用户表中删除, 在已注册的用户表中添加用户并给相应的属性复值, 并根据用户的密码明文生成sha1加密用户密码, 最后保存该用户。
(2) 用户登录。
用户登陆请求会接收两个参数username和password, 从已注册的用户表中查询该用户, 如果查询服务器根据当前的时间生成sessionid来标识本次会话, sessionid保存在会话表中, 然后返回给客户端sessionid, 并将用户昵称字段存进cookie和session数据中, 返回给客户端。sessionid和用户昵称存进会话信息表中。如果在注册的用户表中查不到相应用户则返回用户不存在。
(3) 获取最近的物品发布信息。
用户登陆后首先获得最近期的10个交易, 该请求接收两个参数recent-start和recent-end表示获得交易数量的起点和终点, 首先请求会从请求头中解析本次会话的sessionid, 如果数据库中包含该sessionid则表示该用户现在是登陆状态, 可以继续进行请求。
(4) 获取用户基本信息。
请求接收用户昵称参数, 从数据库中查出该用户后取出用户的真实姓名, 昵称, 学校, 电话, qq号并封装成字典返回。用户不存在返回提示信息。
(5) 发布一个物品。
接收上传用户昵称, 交易标题, 简介, 类别参数。根据交易的标题和当前时间生成交易的sha1来唯一标识该交易, 计算出当前时间, 在数据库交易表中创建一个新的交易, 并将交易的属性根据之前的参数赋值, 之后保存该交易。返回该交易的sha1和上传用户昵称。
图片上传在创建交易请求之后执行, 接收一个交易sha1参数和图片的二进制数据参数。首先从图片的二进制数据中获取图片名称, 根据名称和当前时间生成图片sha1来唯一表示。再由图片的数据生成图片文件和缩略图文件并保存。最后在图片表里创建一个图片的数据, 将所属的交易sha1和图片sha1存入数据库。
(6) 获取单个发布物品的详情。
请求接收交易的sha1和上传用户昵称作为参数。首先根据交易sha1从数据库中得到该交易, 取出交易的类别, 简介, 标题, 时间属性封装成字典, 返回属性值。在根据用户昵称和交易sha1在用户收藏表中取值, 如果取到则表明用户已经收藏, 反之没有收藏, 返回是否收藏的标志。根据交易sha1在交易图片表中取出交易图片的sha1, 返回图片sha1[3]。
(7) 收藏和取消收藏。
收藏:接收用户昵称和交易sha1参数, 然后根据昵称和sha1在用户收藏表中判断该收藏是否存在, 如果存在返回你已经收藏过, 不存在就在用户收藏表中添加一个收藏。
取消收藏:接收户昵称和交易sha1参数, 然后根据昵称和sha1在用户收藏表中判断该收藏是否存在, 如果存在就删除交易, 不存在就会返回错误信息提示收藏不存在。
(8) 获取我发布的物品。
接收开始和结束的数量参数, 从session数据中获取当前用户昵称, 在根据开始和结束数量从交易表中取出制定数量的当前用户发布的交易, 再分别对每一个交易取出各项属性, 根据用户收藏表判断用户是否收藏过, 根据图片表取出交易的图片, 把各项属性值封装成字典, 形成一个属性集合的列表, 对列表按照时间排序后返回。
(9) 获取我收藏的物品。
接收开始和结束的数量参数, 从session数据中获取当前用户昵称, 根据用户昵称在收藏表中取出所有当前用户收藏的交易sha1, 再分别对每一个sha1取出对应的交易, 取出交易的各项属性值, 在图片表里取出对应图片形成交易的信息的字典。把每个交易信息按照时间排序后返回。
(10) 按照分类获取发布的物品。
接收类别参数, 开始和结束的数量参数从session数据中获取当前用户昵称, 根据类别在交易表中找到所有当前类别的交易, 在根据数量参数得到对应的交易, 再分别对每一个交易取出所有属性, 在图片表里取出对应图片, 在收藏表里取出当前用户是否收藏过, 形成一个交易的属性的字典。返回所有交易字典的列表。
2.2 客户端
手机客户端采用android平台。
程序中需要频繁地发送http请求和接收http回复, 如果将请求和回复分别在每一个activity中都进行定义的话, 势必会导致程序代码量增大, 结构混乱。同时, 如果一个请求需要在不同的activity中执行, 就会出现重复定义的问题。因此, 在整个应用中, 最重要的就是对整体框架的搭建[4]。
(1) 定义两个接口College Barter Request和College Barter Response。
在College Barter Request中定义方法to Json String () 和get Type () 。to Json String () 用来将字符串转换成http请求中需要用到的JSON数据, get Type () 返回当前请求的类型。
在College Barter Response中定义方法from Json String () 、get Type () 和get Status () 。from Json String () 用来将服务器返回的JSON数据进行解析, 获取需要获得的字段值, get Type () 返回当前回复的类型, get Status () 返回是否正确的对数据进行解析。
在程序中每一个http请求和回复都要分别实现上述两个接口。
(2) 自定义一个College Barter Client用来处理http的请求和回复。
在构造函数中, 初始化应用程序需要访问的服务器地址。
定义一个函数College Barter Response execute Remote Comm and (College Barter Request request, App Data app Data) 。在这个函数中, 需要初始化一个Http Post, 然后将需要上传的数据添加到Name Value Pair类型的参数里面, 包括验证用户是否登录的session Id。在接收到http回复之后, 通过request的不同类型对http回复执行不同的操作。
(3) 定义类College Barter Operation实现一个Runnable接口。
在College Barter Operation中, 通过线程发送http请求, 接收http请求后, 通过handle.post进行通知。可以避免由于服务器没有响应导致UI线程超时, 应用程序出现ANR (Application No Response) 的问题。
(4) 定义接口College Barter Operation Listener。
在接口中定义方法on College Barter Operation Finish () 。在每一个需要进行服务器通讯的activity中实现这个接口, 可以在当前activity中的on College Barter Operation Finish () 中接收到对应请求的回复, 从而对回复进行处理。
3 结语
“高校网上跳蚤市场”是针对当前跳蚤市场的现状和校园对跳蚤市场的需求开发的, 目标人群是在校大学生。通过实名制的注册与登录, 可以查看到发布者的个人真实有效的信息。因此, 无论是对卖家还是对买家而言, 都提供了一个良好的交易平台。此外, 软件的功能设计完善, 可做到更高效、更便捷地处理高校大学生的闲置物品, 减少浪费, 提高物品利用率。
参考文献
[1]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社, 2010:88-91.
[2]范怀宇.Android开发精要[M].北京:机械工业出版社, 2012:154-156.
[3]孟岩.Android组件模型评析 (上) [J].程序员, 2008 (1) :49-51.
Android客户端
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


