




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学毕业设计(论文) 北京邮电大学世纪学院毕业设计(论文)题 目 基于Android平台的端到端通信客户端设计与实现 学 号 学生姓名 专业名称 所在系(院) 指导教师 2014年 5月 25 日北京邮电大学世纪学院毕业设计(论文)诚信声明本人声明所呈交的毕业设计(论文),题目基于Android的视频采集系统的设计与实现是本人在指导教师的指导下,独立进行研究工作所取得的成果,除了文中特别加以标注和致谢中所罗列的内容以外,毕业设计(论文)中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他教育机构的学位或证书而使用过的材料。 申请学位论文与资料若有不实之处,本人承担一切相关责任。本人签名: 日期: 毕业设计(论文)使用权的说明本人完全了解北京邮电大学世纪学院有关保管、使用论文的规定,其中包括:学校有权保管、并向有关部门送交学位论文的原件与复印件;学校可以采用影印、缩印或其它复制手段复制并保存论文;学校可允许论文被查阅或借阅;学校可以学术交流为目的,复制赠送和交换学位论文;学校可以公布学位论文的全部或部分内容。本人签名: 日期: 指导教师签名: 日期: 摘 要互联网巨头谷歌在安卓领域不断的大量投入,逐渐形成了安卓平台的一个生态圈,进而使得安卓的市场份额逐渐上升,目前已超越IOS平台一跃成为最大的移动平台,如今市场上随处可见各类安卓设备,Android的各种手机应用也应运而生,其中智能终端设备端到端通信的应用市场需求尤为旺盛,在此背景下,本文提出了基于Android平台设计与实现端到端通信的客户端。智能终端之间通信需要选用合适的通信协议,考虑到XMPP是基于XML格式的开源的通讯协议,而XML又具备极强的扩展性,因此,Android平台结合XMPP协议实现的端到端通信系统将会具备很好的发展前景。本文在介绍了介绍了Java平台技术、安卓平台技术、XMPP/Jabber通信协议、Openfire开源组件后,提出了系统的总体设计思路,完成了系统各个模块的划分和功能的实现,该系统分为Openfirefu服务器端和安卓客户端,主要功能模块包括:帐号认证、通信管理、好友管理、缓存管理、数据加密,最后,对本系统进行了详尽的测试。 本文设计的基于Android平台的端到端通信客户端系统,运用了Http、Android、Java技术来实现,基于eclipse平台进行开发,在设计实现该系统的整个过程中,对功能模块做了详尽的划分,并对各核心模块的功能做了仔细的介绍,绘制了相关的数据处理和交互流程图。关键字:端到端通信;Android平台;XMPP协议;JAVA语言; III 毕业设计 AbstractInternet giant Google in Android substantial input field constantly, gradually formed a platform Android ecosystem, thereby making the Android market share gradually increased beyond the IOS platform has emerged as the largest mobile platform, and now you can see all kinds on the market Android devices, a variety of Android mobile applications have emerged, where the application end-market demand for intelligent communication terminal equipment is particularly strong in this context, this paper presents the design and implementation based on the Android platform, client-end communication . Communication between intelligent terminal requires the appropriate choice of communication protocols, taking into account the XMPP protocol is based on open source XML format, and XML and have a very strong scalability, therefore, Android platform combines XMPP protocol-end communication system will have good prospects for development. This paper describes the introduction of the Java platform technology, Android platform technology, XMPP / Jabber protocol, Openfire open source components, it has made the overall system design ideas, completed the realization of division and function of each module of the system, which is divided into Openfirefu Android client and server side, the main function modules include: Authentication, communication management, friends management, cache management, data encryption, and finally, of the system for a detailed test. This design is based on the client-end communication system Android platform, the use of Http, Android, Java technology to achieve eclipse-based development platform, the design and implementation of the system throughout the process, make a detailed functional modules divided , and the function of each core module made a careful presentation, drawing the relevant data processing and interactive flowcharts.Key Word: end communication; Android platform; XMPP protocol; JAVA language;目 录北京邮电大学世纪学院I毕业设计(论文)诚信声明II摘 要IIIAbstractI目 录II1 绪论11.1项目研究背景11.2国内外研究现状21.3 本文的组织结构22 系统开发技术分析32.1 Java语言32.2 Android平台42.2.1 Android的功能特征42.2.2 Android运行时组件52.3 XMPP/Jabber协议52.4.1 XMPP协议分析52.4.2体系结构52.4.3消息格式62.4.4 XMPP协议簇82.4 openfire服务器83 系统分析93.1系统可行性分析93.1.1技术可行性93.1.2经济可行性93.1.3操作可行性93.2需求分析103.2.1外部事件103.2.2系统主要实现内容104 系统设计124.1系统的开发平台124.2系统的开发模式124.3系统总体设计124.4系统流程设计134.4.1 帐号认证流程134.4.2 客户端通信流程134.5系统功能设计144.5.1帐号认证144.5.2通信管理144.5.3好友管理144.5.3缓存管理144.5.4数据加密155 系统测试与调试165.1测试目的165.2程序调试165.3 测试的主要内容165.3.1测试活动165.4测试用例175.4.1功能测试用户登录175.4.2功能测试好友聊天185.4.3功能测试传送图片18第六章 总 结20致 谢21参 考 文 献22IV1 绪论1.1项目研究背景在过去的十多年里,通信行业得到了飞跃式的发展,通信技术从1G、再到2G,到现在的3G以及即将推出的4G,发展速度迅猛,带宽越来越宽,随着通讯行业的发展和人们现代生活工作节奏的日趋加快,移动通讯产品和服务的品种越来越多,更新换代速度越来越快,手机市场争夺日趋激烈和残酷。同时,随着移动通讯的高速数据传输能力越来越强,网络和用户对移动终端的需求越来越高,3G手机如雨后春笋,层出不穷,并且衍生了许许多多当今主流的手机操作系统。Android作为一个移动平台,最为程序员所接受的是它的开放体系架构,它提供了非常好的开发和调测环境,而且其本身拥有非常丰富的UI界面库,从另一个层面来说,提升了该平台下的各类应用的用户体验,不仅如此,安卓还为游戏和多媒体开发提供了丰富的图形组件和多媒体组件。因此,基于以上特点,Android平台促进了技术(包括平台自身)的创新,又极大的降低了开发的成本,同时能支持各大设备商基于自身设备的特点定制厂商自己的版本。从诸多角度来看,它无疑具有非常大的市场发展潜力。Google与包括摩托罗拉、HTC、华为、中兴等数十家设备厂商组成了安卓开发联盟,国内外手机设备厂商的不断加盟,使得安卓平台越来越开放,谷歌也在不断的更新和发布安卓操作系统版本,SDK发布频率也不断加快。Android平台是一个完全开放的移动设备综合平台,它由操作系统、中间件、SDK、关键应用组成。Android的程序运行环境包含了JAVA SDK函数库以及Dalvik虚拟机,它完全继承了JAVA的优点,可以不断优化Java程序的运行过程。Android操作系统本身继承于Linux内核,具备Linux的多线程、内存以及进程的单独管理、设备扩展等优点,同时它也连接了手机的硬件层与系统的软件层。Android设备的普及,加上Android技术平台本身具备的开放性、友好性,催生了企业和个人纷纷投入Android应开发的大潮中,随之而来的是市场上涌现出大量的用于各行各业的安卓应用。在诸多应用中,端到端通信的实时性最强,也最便捷,沟通效果最好。它不仅可以降低交流的成本、提高沟通的效率,避免在打电话上耗费大量时间,使人与人之间跨越时空进行交流通讯,真正实现随时随地沟通无畅。由此可见智能手机终端的端到端通信系统正悄然改变人们的生活和沟通方式。因此,本文研究的基于安卓平台的端到端通信系统具有非常重要的社会现实意义和应用价值。1.2国内外研究现状当今国内外做智能设备端到端通信的公司非常多,产品也层出不穷、不断创新,例如国内有:微信、来往、易信、飞信等等。国外的产品有MSN等等。微信无疑是国内端到端通讯市场的霸主,微信是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件“摇一摇”、“漂流瓶”、“朋友圈”、”公众平台“、”语音记事本“等服务插件。截至2013年11月注册用户量已经突破6亿,是亚洲地区最大用户群体的移动通讯软件。腾讯的成功与其对微信的不断创新和完善是分不开的。1.3 本文的组织结构 本文共分为五章,本文的各个章节内容如下: 第一章 绪论。提出了Android平台端到端通信客户端的研究背景及意义,介绍了移动终端端到端通信的现状、以及未来的发展趋势,第二章 系统开发技术分析。主要介绍了Java平台技术、安卓平台技术、XMPP/Jabber协议、Openfire开源组件等等。 第三章 系统分析。描述了系统的可行性分析,以及对系统的需求分析。 第四章 系统设计。主要讲述了系统的开发平台、开发模式、模块划分,以及各个功能模块的设计与实现第五章 系统测试与调试。讲述了本系统的测试内容和测试方法,设计了一些测试用例,并得出了最终的测试结果。 最后,总结了本文的设计和实现工作。2 系统开发技术分析2.1 Java语言Java是一门高级语言,能自动回收内存,代码健壮安全,并具备跨平台移植的特点,支持多线程的,执行过程中能动态加载解释执行。Java平台是一套规范,所有的JAVA程序运行在JVM虚拟机上,不同的企业和组织可以根据规范实现自己的不同版本。如SUN公司自身提供了多个版本的JDK,而像IBM等大公司也有自己的JVM实现。Java的特点:1. 平台无关性Java程序的编译和执行过程,注定了它具备跨平台的先天优势,同时因为JAVA语法中的数据类型与机器无关,加之JVM虚拟机的引入,则奠定了Java程序跨平台的特性。JVM是一套标准规范,由SUN公司制定,针对不同的操作系统平台,提供一个JVM的实现即可。JVM在操作系统中是一个单独的进程,但是它本身也是一个虚拟机器,能解释执行二进制代码。因此,以上特点决定了Java的平台无关性。2. 安全性(1) Java语言是强类型语言,因此编译器会对Java对象类型做检查,保证类型兼容。(2) Java中不允许存在指针,因此内存绝对安全。(3) Java后台运行了垃圾回收线程,可以随时回收不需要的内存。(4) Java的类加载器机制,可以确保运行的都是受信代码。综上所述,Java是一门安全的高级语言。 3. 面向对象Java面向对象主要体现在以下方面:(1) 抽象Java支持抽象类,它体现了数据抽象的思想,是实现多态的一种机制。(2) 继承Java支持单继承,如果要实现多继承,可以通过多个接口的方式变通实现。使用继承,实现了软件代码的复用。(3) 封装Java语言通过私有变量封装自己的数据,避免数据的共享和随意修改。(4) 多态Java语言通过动态加载类、方法重载等实现了面向对象的多态特性。2.2 Android平台Android平台是由google公司推出的,它自身的开放自由精神。使得Android平台不断吸引众多玩家,无论是软件,还是配套的硬件设备,都云集了大量实力雄厚的企业和组织,Google App 应用商店的商业模式也激活了整个安卓市场,它将应用开发者和APP消费者真正有效的衔接起来。真正形成了一个充满活力、充满创新的全新的生态体系。在谷歌收购Android操作系统之前,一直由Andy Rubin潜心研发,最初的目的是用于支持手持设备。2005年由谷歌收购并注资,谷歌如获至宝,开始游说多家设备制造商组成手机平台开发联盟,并将这一系统延伸到PAD平板和手持终端上。据可靠数据统计,截止2010年年末,安卓系统的市场份额已经超越诺基亚的Symbian系统,一跃成为全球最普及、最受用户欢迎的智能手机移动平台。诺基亚的塞班系统被淘汰后,安卓的竞争对手也由诺基亚的塞班系统变为苹果的IOS系统,多年来,安卓系统无论是设备持有量,还是市场份额,还是应用数量,都远远超出苹果的IOS系统,可见安卓平台的先天优势以及强大的生命。2.2.1 Android的功能特征安卓的功能特征主要体现在以下方面:(l)组件式开发,丰富的API和控件。(2)Dalvik虚拟机执行,API兼容性强。(3)丰富的多媒体库,支持OpenGLES,并且支持硬件层面的加速。(4)内置轻巧方便的SQLite数据库,轻量级设计适合在智能终端上使用。(5)丰富的通讯能力,包括GSM、CDMA、蓝牙、GPS、WIFI模块等等。2.2.2 Android运行时组件Android可以使用java作为编程语言,使用Dalvik虚拟机执行程序,Dalvik是谷歌自行研发的虚拟机,Android在运行期依赖核心类库,在Dalvik虚拟机中执行。2.3 XMPP/Jabber协议2.4.1 XMPP协议分析目前主流的IM协议有四种,包括:可扩展消息与存在协议(XMPP)、空间和即时信息协议(PRIM)、即时信息和空间协议(lMPP)、针对即时信息和出席扩展的会话发起协议SIP(SIMPLE)。在这四种主流协议中,XMPP协议具有很好的灵活性和扩展性。由于XMPP协议是高度自由、高度开放的协议,易于掌握和理解,而且在服务器、客户端、插件、源代码库等方面,有多种实现。任何遵循XMPP协议的软件,可以实现相互通讯。加之Google公司开发的Gtalk软件也是基于XMPP协议的及时通讯软件,同时很多软件巨头也对XMPP协议进行支持,促进了XMPP协议的推广和普及。因此,研究XMPP协议及基于此的即时通讯软件的设计与实现,有深远的意义。2.4.2体系结构XMPP的基木网络结构中定义了三个角色:Client、Server和Gateway。图2-4 XMPP的体系结构如图2-4所示, 如果XMPP ClientA和XMPP ClientB进行通讯,首先XMPP ClientA登录XMPP ServerA进行身份验证,身份验证通过后,XMPP ServerA搜索本地用户是否存在XMPP ClientB,如果存在,则建立连接,如果不存在,XMPP ServerA则通过DNS Server查询到XMPP ServerB,进而XMPP ServerA与XMPP ServerB交换数据,XMPP ServerB查找木地服务器中是否存在XMPP ClientB,存在,则将XMPP ClientA和XMPP ClientB建立连接,如果不存在,则继续上面的步骤。如果XMPP ClientC与非XMPP ClientD进行通讯,首先XMPPClientC登录Protocol Gateway进行身份验证,验证成功后,Protocol Gateway与Other Server进行信息交换,由OtherServer查找非XMPP ClientD,查找成功后,则建立XMPP ClientC和非XMPP ClientD之间通讯。2.4.3消息格式XMPP协议的通信消息是基于XML的,XML数据流中包含了会话过程中传递的所有数据,在XML的数据流中,每个节(Stan-za)都是通过命名空间确定的结构化数据块,开发人员可以通过扩展命名空间来增加功能。XMPP协议包含三个顶层xml标签。例如:online今天天气很好其中,标签表示用户的状态,即是否在线。当用户的状态发生改变时,就会在stream中插入相应的presence标签,以表示用户当前的状态。表 2-1 用户状态标签描述Presence表示包含用户在线状态的信息To接受信息的用户JIDFrom发送信息的用户JIDShow用户的在线状态Status包换用户自定义的状态信息TypeType=“unavailable”表示不在线Type=“ subseribe”发送方定制哪些用户在线Type=“unsubscribe”为定制用户在线Type=“prob”查看用户是否在线的请求Type=“error”出现错误标签表示两个用户之间发送的消息。有一些相关的属性:to、from、type等表明发送方、接受方、类型,还可以包括一些子元素。表2-2 消息标签标签描述Message表示包含聊天的内容To发送信息的目标JIDFrom发送该信息的用户JIDType表示聊天的类型Type=“chat”表示一対一的聊天Type=“Group chat”表示群聊Type=“error”表示出现错误Body聊天的详细内容Error错误信息标签表示一次查询会话。包括发出信息/查询操作的实体和接收查询/设置的实体,以及信息/查询操作的类型。信息/查询主要的用处是获取或设置用户的基本信息,比如用户的名字、电子邮件、地址信息等等。表2-3 查询标签标签描述Iq表示一次查询会话To接受信息的用户JIDFrom发送信息的用户JIDQuery表示要查询的会话内容Type表示查询对话的类型Type=“get”表示获取信息Type=“result”表示返回的查询结果Type=“set”表示用户在服务器设置基本信息2.4.4 XMPP协议簇XMPP协议簇一共分为四层,最底层的是TCP协议,向上依次分别是TLS协议(即传输层安全协议)、SASL协议(简单认证和安全层协议)、XMPP协议。TLS由操作系统提供,用于在两个通信应用程序之间提供保密性和数据完整性。SASL是由应用层提供,而XMPP则是应用层本身。XMPP协议采用SASL协议作为身份认证协议。基于XMPP协议的SASL协议需提供如下三个方面信息:服务名(XMPP)、初始序列、交换序列和安全层协商。其层的顺序为TCP一TLS一SASL一XMPP。2.4 openfire服务器openfire(原名Wildfire或者JiveMessenger)是由Java语言编写的、基于XMPP协议的服务器,具有跨平台能力,获得了Apache2.0许可证。openfire是基于XMPP协议的IM的服务器端的一个实现,两个用户想要进行通讯,首先要连接到Openfire。服务器获取一些连接信息,然后两个用户之间才能建立连接。当两个用户之间建立连接后,用户可以采用点对点的方式来发送接收消息。选择openfire作为即时通讯服务器是因为其自身的存在诸多优点:openfire服务器拥有基于Web的管理界面,方便管理员的管理操作。实现了插件的机制,方便扩展。软件开发前期不用过度考虑用户需求,可以以插件的形式,随时添加功能。Openfire是一个开源的服务器,软件开发人员可按照自己的需求进行定制化更改。提供了对SSL/TLS的支持。安装方便,用户界面有好。支持多种数据库连接,用于存储信息和用户详细内容。openfire是使用纯Java语言开发的、平台独立的服务器,并且都是开源的。3 系统分析3.1系统可行性分析3.1.1技术可行性技术上使用Java语言编程,Java的API接口不仅提供了非常丰富的函数库,它还具备面向对象的诸多优点,能方便的扩展系统功能。Openfire服务器是一款成熟的开源组件,它不仅免费,而且小巧、易于安装,同时,安卓客户端使用Android SDK,其本身含有非常丰富的UI控件,其他应用编程框架也能很完善支持各种通信协议,因此在技术上,是绝对可行的。3.1.2经济可行性系统开发过程中的知识储备,需要参阅相关资料,这些通过互联网或者查阅图书都可以轻易获得。而开发过程中所需的软件包都是开源的,免费并易于获取。对硬件设备的要求也不高,使用普通的PC计算机就可以作为服务器,而安卓的智能终端手机现在也已非常普遍,并且现在WIFI网络也非常普及。整个开发过程中的成本几乎为零,搭建调测环境的成本也几乎可以忽略不计,因此,站在经济角度来看,该系统可行。3.1.3操作可行性整个系统开发和部署用到的工具和软件都可以安装在一台计算机上,同时现在的电信网络已经非常普及,只要能正常访问网络,整个系统启动后,使用安卓智能终端设备,就可以开始测试,因此,在操作上是绝对可行的。3.2需求分析3.2.1外部事件图3-1阐述了用户与安卓通信客户端的交互过程。在这个业务模型中,通过分析业务场景,识别出参与者:用户,用户使用界面上的按钮与应用交互,应用通过UI界面响应用户输入,并向GUI输出结果。图3-1系统参与者3.2.2系统主要实现内容通过学习Android平台的相关技术,熟悉Android UI控件的使用、应用的开发方法以及Android底层通信的原理,深入了解Android项目的开发模式,从而开发出一款基于Android平台的端到端通信客户端。Android通信客户端实现的相关功能模块如下:q 面向智能终端用户的UI操作界面。q 帐号认证模块。q 好友模块。q 通信模块。q 最近消息缓存模块。4 系统设计4.1系统的开发平台由于基于Android的端到端通信客户端使用Java技术来开发,所以选择了时下最流行的eclipse作为集成开发环境,作为一个可动态扩展的开发平台,通过安装Android SDK插件,实现在同一个平台下开发和调试,既便于管理,又便于调试。4.2系统的开发模式基于Android的端到端通信客户端,分为后端服务器和移动终端客户端两大组件,后端服务器由选用Openfire开源组件,对外提供XMPP协议,对内可以实现服务器本身参数的配置和管理,以及系统帐号的管理等等。安卓移动客户端采用了经典的MVC的设计模式,将系统的视图层、控制逻辑层以及数据模型层进行完全分离,使客户端各个模块实现高内聚、低耦合,方便后续的维护和扩展。其实Android操作系统本身也是基于MVC设计模式实现,也就是说,安卓平台在解耦和设计方面具备天然的优势,在Android程序开发过程中,视图层的设计和实现,大部分可以通过配置XML文件实现,然后辅之以适当的编码,就能很轻松的实现视图层的开发工作,而Http的通信传输、XMPP协议的解析则封装为系统的通用服务。 因此,基于Android的端到端通信客户端的开发模式为:移动客户端与服务器交互模式。4.3系统总体设计安卓端到端通信客户端主要功能模块包括:帐号认证模块、好友模块、通信模块、消息缓存模块,如图4-1所示。图4-1 功能结构图4.4系统流程设计4.4.1 帐号登录登出流程用户访问客户端,输入登录用户名和密码,客户端将认证请求发送给后端的Openfire服务器,服务器收到请求后,进行身份验证,如果验证成功的话,向客户端发送登录成功的响应消息以及用户的个人数据。如果验证不成功的话,则向客户端发送包含失败信息的响应消息。登录成功后,系统将服务器响应体中返回的个人信息封装成User对象。用户登录系统后退出客户端时,只需要简单的发送登出请求就可以退出系统,服务器收到该请求后,关闭与客户端的连接,回收线程到线程池中,同时将用户的离线消息广播给好友。流程图如图4-2:图4-2帐号认证流程图4.4.2 客户端通信流程客户端通信通过GPRS、WIFI等无线网络连接到后端Openfire服务器,通信网络协议为TCP协议,应用层协议为XMPP协议,Openfire服务器很好的实现了XMPP协议。其通信的原则是服务器端和客户端都启动消息监听。两个客户端之间通信需要相互为好友,即在消息通信时需要指定发送消息的目标用户,如果两个用户在两个不同的安卓终端设备上登录,都处于在线状态,则用户A在好友列表中选择用户B,并编辑消息点击发送后,服务器端受理该请求,并将消息缓存到队列,在用户B的客户端下次心跳时检测是否有新的消息时,再根据消息目的地和用户B匹配,通知用户B获取最新消息,交互流程图如图4-3:图4-3 客户端通信流程图4.5系统功能设计4.5.1界面设计Android应用程序的开发,其界面可以通过配置XML文件的方式静态实现,也可以通过编码的方式动态绘制。第一种方式所见即所得,方便高效,被广大程序员广泛接受,在绘制应用程序界面的时候,可以使用安卓平台丰富的UI控件库,例如布局控件RowLayout、GridLayout、TableLayout等等, Widget控件属于界面中的小部件,包括按钮、文本框、进度条、下拉框、列表框等等。界面设计如图4-4:图4-4 登录界面设计以上界面为登录界面,主要由TextView控件和EditText控件以及按钮控件构成,使用LinearLayout布局。每个控件都有非常多的属性,如长度、宽度、颜色、字体大小、布局方向等等,通过将界面上的控件注册监听事件,如单击事件、长按事件、双击事件等,用户就可以通过界面与系统交互。端到端通信客户端系统的界面主要包括用户登录、用户登出、最近好友消息、好友列表、聊天界面、传送图片、文件、视频界面等等。4.5.2帐号认证和初始化帐号认证模块,分为两个阶段:服务器端的认证和客户端的初始化。第一阶段,在输入登录用户名和密码后,向后端Openfire服务器发起认证请求,服务器收到请求后,查询Mysql数据库进行身份验证,如果验证成功的话,则返回成功消息,同时后端服务器的会话管理器新增一个活动会话,处理该客户端的请求。 第二阶段,客户端在获取到响应结果后,提示用户登录成功,并进入客户端主界面,此时进行系统的初始化,首先从服务器端加载离线消息,并刷新到最新消息列表界面,其次启动文件传输监听器和聊天监听器,最后发送广播到所有好友,该用户的状态为在线。登录逻辑代码片段如下:connection.login(name, pwd);if(connection.getUser() = null)return false;offlineMessageManager = new OfflineMessageManager(connection);hostUid = connection.getUser();fileTranListener = new MFileTranListener();transferManager.addFileTransferListener(fileTranListener);startChatLinstener();OfflineMessageSendBrocast.sendBrocast(context, OfflineMessageSendBrocast.getOfflineMegs();登录界面如图4-5:图4-5 登录界面4.5.2消息通信管理在端到端的通信系统中,用户体验最重要的元素是消息的及时性,即当两个客户端聊天通信时,如果双方均处于登录在线状态,需要能够立即收到对方发送的消息。当一个用户的状态发生变化时,该用户的所有好友应该能够立即收到好友下线的消息,并刷新好友列表的状态。为满足及时交互、消息无延迟推送需求,服务器需要为每个客户端创建一个会话,在服务器端维护一个活跃用户的会话列表,并启动线程池对相关会话进行及时处理。客户端之间消息的发送和接收由线程池中的线程接管,并根据绑定的会话标识,经过一些处理之后交给目标用户的会话,由目标用户会话来负责把消息推送到目标用户客户端。使用线程池可以提升系统的吞吐率,提升系统响应速度,减小时延。当服务器启动时,线程池也跟随启动,并初始化指定数量的线程进入线程池,当服务器其他部分的装载组件反馈消息给会话管理组件时,会话管理组件动态地从线程池中取出没有使用的线程并将它们指派给消息端口,负责客户端的连接监听。客户端通信时,采用Asmack组件库的相关接口,与后端Openfire服务器通信,。Asmack是Smack在Android上的实现,Smack是一个基于Java编程语言的XMPP客户端库。库中的org.jivesoftware.smack.packet包封装了message,presence,和iq的处理类。当然系统也可以直接创建和发送信息包。Smack提供了一套简单的机制,可以将任意的属性添加到消息体中。每一项属性都是一个键值对,它可以是Java 的原生数据类型,也可以是实现了Serializable串行化接口的对象。每个用户在与其他用户聊天或者传输数据时,都在应用底层建立了一个虚拟会话,并对该会话启动了一个监听,监听器主要用于监听新的到来的消息,并对接收到的消息进行相关的处理,如缓存消息到本地、刷新消息列表、刷新聊天界面等等,其代码片段如下: if (chat.getListeners().toArray().length 1) chat.removeMessageListener(this);return;String uid = msg.getFrom().split(/)0;CommonMessage mMsg = null;long rowid = 0;try mMsg = new CommonMessage(uid.trim(),xManager.getUserIconAvatar(uid),System.currentTimeMillis(), 0.12km, msg.getBody(),MSG_STATE.ARRIVED, MSG_CONTENT_TYPE.TEXT,MSG_DERATION.RECEIVE,TypeConverter.nullStringDefaultValue(PiLinApplication.friendsNames.get(uid.trim(),uid.split()0); catch (FileNotFoundException | XMPPException e) e.printStackTrace();rowid = messageDAO.save(mMsg, hostUid);if (!PiLinApplication.mJIDChats.containsKey(uid) PiLinApplication.mJIDChats.put(uid, chat);/ 刷新消息列表if (!cPeopleDAO.peopleChatting(uid, hostUid) android.os.Message om = new android.os.Message();om.what = CustomConst.HANDLER_CHATPEOPLE_LIST_ADD;om.obj = uid;PiLinApplication.getHandlers(MsgFragment).get(0).sendMessage(om);handRefreshSession(uid);/ 聊天对话框内刷新List handlers = PiLinApplication.getHandlers(uid);for (Handler hand : handlers) Log.i(MReceiveChatListener,hand.getClass().toString().split($)0);if (hand.getClass().toString().contains(ChatActivity) handChatActivity(hand, rowid);用户发送消息时的逻辑则相对简单,在将消息发送出去后,完成如下工作:缓存消息到本地、将消息加入消息队列、通知适配器刷新。后台Handler自动会将消息队列中的消息通过适配器刷新到相关界面上。其代码片段如下:prevMsg = mEmtMsg.getText().toString();mEmtMsg.setText();try mChat.sendMessage(prevMsg); catch (XMPPException e) e.printStackTrace();message = new CommonMessage(userInfo.getUid().trim(),nearby_people_other,System.currentTimeMillis(),0.12km,prevMsg,MSG_STATE.ARRIVED,MSG_CONTENT_TYPE.TEXT,MSG_DERATION.SEND,userInfo.getName() ;messageDAO.save(message,hostUid);messages.add(message);refreshAdapter();聊天界面如图4-6:图4-6 聊天界面好友列表界面如图4-7:图4-7 好友界面4.5.5缓存管理在客户端中,我们需要缓存用户的数据,如帐号和密码、好友列表数据、好友消息等等,此处我们使用安卓平台内嵌的SQLite数据库,SQLite作为一个轻巧快速的小型数据库,满足ACID特性,已经在嵌入式产品中得到广泛应用,它不仅不需要占用太多的系统资源,在一般嵌入式产品中,一般只需要为SQLite预留几百K的内存就足够运行它。它能兼容大部分系统平台,如Windows平台、Linux平台、Unix平台等等,而且兼容多种编程语言,像Java、C#、C+、PHP等等,SQLite数据库具备如下特点:1. 轻量级SQLite数据库除了核心引擎,其它需要加载的动态库非常少,因此整个SQLite的尺寸也非常小。2. 独立性。SQLite数据库的核心引擎能够独立运行,不依赖于任何的第三方软件,这样部署或者移植的时候方便省事。3. 隔离性SQLite将数据库中所有的元数据放在一起,方便管理和维护。4. 跨平台性SQLite数据库能兼容市面上各种主流的操作系统,不仅包括桌面操作系统如:Windwos、Linux、Unix,还支持各种主流的移动操作系统,如Android系统、Windows Phone系统等等。5. 多语言接口SQLite数据库能够被各种语言使用,因此,广受开发者的追捧。考虑到缓存数据的特点和对安全性的需求,缓存管理的存储方案就采用安卓自带的SQLite。 缓存数据的表结构设计如下:(1) People好友信息表表3-6 People好友信息表字段字段类型说明IDint主键uidint用户IDisVIPint是否VIP用户nametext好友名称sextext好友性别agetext好友年龄statetext登录状态(2) Message缓存消息表表3-6 Message缓存消息表字段字段类型说明IDint主键uidint用户IDcontentTypeint内容类型(普通文本、图片、音频、视频)statetext已读状态contenttext消息内容msgtimetext发送消息时间msgDirectiontext消息传递方向(我发送给好友的、好友发送给我的)由于系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园林亮化施工方案范本
- 石家庄地面防腐施工方案
- 宁夏职业技术学院《欧美文学史AⅡ》2023-2024学年第二学期期末试卷
- 江西科技职业学院《药用植物与生药学》2023-2024学年第二学期期末试卷
- 浙江音乐学院《水利工程概预算》2023-2024学年第二学期期末试卷
- 南京工业职业技术大学《化工制图与AutoCAD》2023-2024学年第二学期期末试卷
- 漳州职业技术学院《PLC与电气控制》2023-2024学年第二学期期末试卷
- 2025至2031年中国毛刷胶辊行业投资前景及策略咨询研究报告
- 内蒙古工业大学《电子商务双语》2023-2024学年第二学期期末试卷
- 城镇道路基础施工方案
- 高二下学期《家校携手凝共识齐心协力创辉煌》家长会
- (二模)沧州市2025届高三总复习质量监测 生物试卷(含答案详解)
- 2025年四川蓬安相如旅游开发有限责任公司招聘笔试参考题库含答案解析
- 2025建筑材料供应商采购合同模板2
- 机械基础试题库及参考答案
- 2025浙江1月卷读后续写及满分语料10类40句 (真假小偷) 原卷版
- 2024年农艺师考试实务考核试题及答案
- 餐饮合伙协议合同范本
- 第二单元 人民当家作主(B卷 能力提升)2024-2025学年高中政治统编统编版必修三单元测试AB卷(含解析)
- 人教鄂教版科学五年级下册第一单元 昼夜与四季单元教学教案
- 山东省烟台市芝罘区(五四制)2022-2023学年七年级下学期期中考试英语试题及答案
评论
0/150
提交评论