基于安卓的聊天App的设计与实现毕业论文Word格式.docx
《基于安卓的聊天App的设计与实现毕业论文Word格式.docx》由会员分享,可在线阅读,更多相关《基于安卓的聊天App的设计与实现毕业论文Word格式.docx(53页珍藏版)》请在冰豆网上搜索。
2即时通讯市场发展现状ﻩ2
3本文主要工作ﻩ4
4论文的组织结构4
第2章 Android的架构分析ﻩ5
2。
1Android特征ﻩ5
2Android的架构ﻩ6
2.3Android的工作机制7
2.3。
1Activity7
2.3.2Service8
2.5本章小结10
第3章即时通讯系统ﻩ11
3。
1系统概述ﻩ11
3.3 系统架构13
4网络通信ﻩ13
2。
3.4 网络协议ﻩ13
4GPRS和Intenet的连接16
3.5 AndroidSDK介绍ﻩ16
6本章小结18
第4章系统的设计与实现ﻩ19
4。
1系统项目结构设计ﻩ20
2系统客户端的设计与实现21
4.2.1用户界面21
3即时通讯流程描述24
3。
1判断网络是否连接ﻩ24
2用户的登录和登出24
4好友列表的读取ﻩ27
4.3.5发送和接收消息ﻩ27
第5章系统的部署及测试30
5.1系统部署ﻩ30
5。
2系统测试30
结论与展望ﻩ33
致谢34
参考文献ﻩ35
附 录ﻩ36
附录A外文文献及其翻译ﻩ36
附录B 主要参考文献的题录及摘要45
ﻬ图标清单
表4—1user表结构ﻩ22
图2—2工作流程图7
图2—4Android系统在市场的占有率(2014—2016)9
图4-1系统整体流程图ﻩ19
图4—2代码结构图1ﻩ20
图4—3 代码结构图221
图4-4用户实体-联系图ﻩ23
图4-5登录模块24
图4—6登录界面效果图25
图5-2 服务器用户列表ﻩ30
图5—3会话列表界面31
图5-4好友列表界面ﻩ31
图5- 5jack聊天页面32
图5-6tom聊天页面32
引言
可能谁也不会想到,在多年前被许多人视为浪费时间的即时通讯软件如今已成为了人们生活中不可或缺的东西。
互联网络的迅速发展,4G时代的来临,网络竞争的新一轮焦点当属移动即时通讯市场。
自04年起,许多网络巨头公司就发现了这一商机,微软、雅虎、网易、UC等一批又一批即时通讯软件都潮涌而出,与原本牢牢控制着国内即时通讯市场的QQ争锋相对,开启了一场没有硝烟的战争。
随着时代的发展,QQ靠着庞大的用户群,依然占据了大部分的市场,07年Android发布以后,移动即时通讯成为即时通讯市场的新宠,方便快捷的用户体验使得即时通讯市场又掀起一波浪潮.据中国互联网信息中心(CNNIC)发布的《第37次中国互联网络发展状况统计报告》表明,移动即时通讯在互联网使用中几乎由这不可动摇的地位。
个人认为,虽然国内即时通讯市场已几乎被QQ等软件垄断,但是在一些针对性的即时通讯软件开发还存在可观的潜在利益。
所以本文所研究的方向是如何快速的为自己企业的App集成一个即时通讯系统。
ﻬ第1章绪论
1.1课题背景
根据中国互联网信息中心(CNNIC)发布的《第37次中国互联网络发展状况统计报告》显示,截至2015年12月底,我国网民数量达到了6。
88亿,其中手机网民达到90.1%,手机上网已成为网络接入的一个重要组成部分.在十大互联网应用中,即时通信、搜索引擎和网络新闻三大互联网基础应用占据三甲,使用率均超过80%。
其中,即时通信使用率为90.7%,用户规模达到了62408万人,相比于2014年全年增长了3632万,全年增长率6。
2%。
其中手机即时通讯用户规模达到了55719万,由此可见,移动即时通讯在互联网使用中所占据的重要地位。
Android是Google公司在2007年11月推出的一个专为移动设备设计的软件平台,它是一套真正意义上的开放性的移动设备综合平台。
Android由Linux和Java构成的开源软件,不限制任何用户在其基础上进行开发。
它满足了手机市场对于开放性平台的迫切要求,从而如雨后春笋一般迅速崛起。
2013年12月4日下午,工业和信息化部正式发放4G牌照,宣告我国通信行业进入4G时代,如果说3G使得移动即时通讯成为现实,那么,第四代通讯技术2000倍于拨号网络的速度几乎能够满足所有用户的所有通信方式,包括视频和文件,都能在极短的时间内传输完成,这可以说是移动即时通讯一个重要的里程碑。
1.2即时通讯市场发展现状
1。
1即时通讯市场状况
目前即时通讯市场已经由百家争鸣状态走向了大统一。
原来形形色色的各种即时通讯软件兴起一时,但随着用户群体的减少渐渐走向末路.这些现象是即时通讯市场逐渐走向成熟的标识。
时至当下,要论国内现有相对流行的几款即时通讯软件,应该属腾讯的QQ以及微信(WeChat)为首了,这两款在国内市场占据了主导地位。
其它小部分市场被更具针对性的阿里的钉钉,移动的飞信等等软件所瓜分。
他们的共同点是有强大的服务器作为技术支持,当然还有大量的第三方客户端的推广作为用户群体基础。
还有些老牌的即时通讯软件,也同样有着强大的服务端支持,如MSN、IRC、ICQ、UC等等,但是因为跟不上市场需求,用户群没有持续的增长,到现在已经逐渐走向消亡,用户群体逐渐被压缩或者被其他软件所取代。
在与新软件的竞争过程中,缺乏变化,或者被模仿,从而失去新颖性而逐渐走出用户群的视野,新生代的用户多数甚至还没有听说过。
当然,还有更多的小规模团队开发的软件,由于缺乏有力的市场宣传,资金链支持,客户服务,最重要的是缺乏创新也无法吸引足够的使用者,也无法坚持生存下去,销声匿迹是它必然的归宿.
1.2.2 即时通讯市场细分
每一个用户都会根据自己的需求和期待选择使用不同的即时通讯软件.即时通讯,顾名思义,指在最短的时间内在用户之间进行信息的交互,从而获得庞大的用户群,一般来说,商家不靠这个赚钱,这是一个免费提供的业务.当然在这个用户群的基础上,可以推出一些增值业务,如QQ的靓号,黄钻,会员等等,但这不在我们现在的探讨范围内。
我们现在所讨论的是按用户对于通讯软件基本功能需求来进行细分。
第一、按用户的性质可以分为企业用户、群体用户、个人用户:
这三者之间的不同之处在于他们所处的环境不同,使用即时通讯软件的目的不同,虽然都是信息的交换,但是企业用户多数谈的是工作上的事,和企业相关的信息,而群体之间交换的是更多的是一些公众信息,作为一个维系群体的存在的平台,个人之间交换的更多的是私生活,个人交际。
第二、按所发的信息类型可分为:
文字信息、文件信息、音频信息、视频信息:
这种分法就很容易理解了,主要按照用户所发信息属性来区分,当然用户之间并不局限于单独的一种或者几种。
从当下主流的通讯软件来看,基本都涵盖了大多数情景,不论是QQ、微信,还是钉钉。
第三、按信息对人的意义可以分为人机信息、机器信息:
1、人机信息:
可以被人类所直观理解的信息,如语言,图像,文字等.
2、机器信息:
简单来说,指人类无法直接理解的机器语言,是机器与机器之间直接交互的信息。
2.3 即时通讯的前景
对于一些小型企业来说,即时通讯市场已经不适宜他们生存了。
他们能够做的,都已经被QQ、微信等主流软件所实现,想从他们手中夺取用户资源,无异于水中捞月。
而且,研究表明,人类很容易对一个长期使用的事物产生依赖,通讯软件同样如此,他们将被依赖所绑定。
自从QQ在国内崛起后,许多企业都想从这个大蛋糕中分得一块,但多年过去,却没有什么结果,反而腾讯QQ利用庞大的用户群优势,吞噬了其它企业的市场,如联众的在线游戏。
据2015年10月22日腾讯全球合作伙伴大会上PPT所演示内容,当时的QQ最新月活跃用户量达到8.23亿,而微信也达到了6亿之多。
如此巨大的用户资源堪称恐怖。
即时通讯软件的重要基础就是拥有庞大的用户群,从而垄断整个市场,在这种情景下,已经形成气候的QQ、微信等很容易扼杀新兴的软件的,除非拥有更为雄厚的经济实力和更加强大、新颖的技术实力。
不过,这几乎是难以实现的,所以,从另一个突破口来寻找机遇是必然的.
面向个人用户,是当下即时通讯市场的重要特点,这种模式一般都不直接产生直观利润。
但是对于一个企业来说,他们也存在巨大的需求,这将带来很可观的收益。
对于即时通讯的后来者来说,这无异于一个切入点。
拨开眼前的迷雾,前途是光明的,闯过曲折的道路,迎接你的是康庄大道,想要踏入即时通讯市场,这是必然的经历。
无论是通讯市场的垄断持续,还是新兴技术软件的争锋,对用户来说,更为强大,方便,切合用户利益的软件产品才能在这个市场中生存地更久.
1.3本文主要工作
Android作为一个开放性平台,自出现依赖深受广大用户的青睐.本文从实际应用出发,提出了开发基于Android系统的手机端即时通讯软件系统.本文的主要工作包括:
根据环信2。
0开发文档,以环信的云服务器为基础,对该系统进行了具体的设计和实现。
本系统拥有即时文本信息传输,管理好友列表,新消息通知,登录注册等功能模块。
该系统可在Android模拟器上运行,并且取得了良好的运行效果。
4论文的组织结构
本文首章分析了系统的研究背景,从即时通讯市场现状、即时通讯市场细分,即时通讯发展前景等方面介绍了即时通讯市场的发展现状.
第二章,对Android的架构作了系统的分析,从Android的特征,工作机制,并把它与其它手机操作系统对比,来体现Android的优势。
第三章,对比当前网络流行的即时IM,对环信即时通讯云进行深入的剖析,对系统的即时通讯机制进行分析,提出解决方案。
第四章,对系统的界面,即时通讯模块,本地数据库模块和扩展功能几个方面进行了详细的设计及实现。
第五章,通过注册登录,获取好友列表,获取会话列表,消息的发送和接受,添加、删除好友几个方面对系统进行测试。
第六章,总结本文的研究内容以及研究成果,通过对过程及结果的分析,整理,归纳,得出自己的观点及存在的问题,并对今后发展的展望。
ﻬ第2章 Android的架构分析
Android是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google和开放手持设备联盟主导。
Android
系统最初由安迪·
鲁宾(Andy
Rubin)制作,最初主要支持手机。
2005年8月17日被Google收购。
2007年11月5日,Google与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(OpenHandsetAlliance)来共同研发改良Android系统并生产搭载Android的智慧型手机,并逐渐拓展到平板电脑及其他领域上。
随后,Google以Apache免费开元许可证授权方式,发布了Android的源代码.
1Android特征
系统内核:
Android是运行于Linuxkernel之上,但并不是GNU/Linux.Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到userspace,使得Linuxdriver与Linux kernel彻底分开,以bionic取代Glibc、以Ski-a取代Cairo、再以opencore取代FFmpeg等等。
硬件抽象层:
Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块,为了把 Androidframework 与Linuxkernel隔开。
中介软件:
操作系统与应用程序的沟通桥梁。
Android使用skia为核心图形引擎,搭配OpenGL/ES。
skia与LinuxCairo功能相当,但相较于LinuxCairo, skia功能还只是雏形的。
2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,目前Skia也是GoogleChrome的图形引擎.
Android的多媒体数据库采用SQLite数据库系统。
数据库又分为共用数据库及私用数据库。
用户可通过ContentResolver类(Column)取得共用数据库。
Android的中间层多以Java 实现,并且采用特殊的Dalvik 虚拟机(Dalvik VirtualMachine)。
Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少.
Dalvik虚拟机可以有多个实例(instance), 每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。
Dalvik 虚拟机并非运行Java字节码(Bytecode),而是运行一种称为。
dex格式的文件。
安全权限机制:
Android本身是一个权限分立的操作系统。
系统更多的安全功能通过权限机制提供。
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。
安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。
2Android的架构
Android的系统架构采用了分层架构的思想,如图1所示。
从上层到底层共包括四层,分别是应用程序层,应用程序框架层,系统库和运行时,Linux内核。
图2—1分层架构图
应用程序层:
在这层中,系统提供了一些基础的核心应用包,如短信、联系人管理、电子邮件、日历、系统设置、浏览器等.同事,开发者可以利用Java语言编写属于自己的应用程序,这些程序与核心应用程序是平等的。
应用程序框架层:
该层作为应用程序开发的基础,在绝大多数情况下,开发人员都在与她打交道。
应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。
在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架.并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。
基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
系统库和Android运行时:
系统库包括九个子系统,分别是图层管理、媒体库、SQ-Lite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。
Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Andr-oid的核心库,比如android。
os、android.net、android.media等等。
后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
Linux内核:
目前市场上广泛流行的Android版本中,以Linux3.8为服务核心的Andr—oid5.0系统大幅度提高了RAM的读取速度和多任务处理能力,拥有良好的用户体验。
3Android的工作机制
一个Android程序由四大组件组成,它们分别是“Activity”,“Service”,“ContentP-rovider”和“BroadCast Receiver"
。
但并不是每一个应用程序都包含这四个组件,在应用程序中使用这些组件时,必须先在AndroidMainfest.xml中进行配置.Android的应用构成和工作流程图如下:
图2-2 工作流程图
2.3.1 Activity
Activity是用户接口程序,几乎所有的Activity都要和用户打交道,原则上它会提供给用户一个交互式的接口功能。
Activity自身是没有界面的,所以它会创建一个窗口,通过setContentView(View)接口来加载UI界面。
Activity可以全屏显示,也可以通过更改主题使得其窗口化。
Activity一共有七大生命周期:
图2—3Activity的生命周期
(1)Activity生命周期
由图2—3可知,一个Activity正常启动过程中,调用的方法为onCreate()—>onStart()-〉onResum();
在Activity被Kill的时候调用的方法为onPause() —>
onStop()—〉onDesto—ry();
这是一个完整的生命周期。
onCreate():
在此方法中创建界面,做一些初始化操作.
onStart():
变成“用户可见不可交互"
状态.
onResume():
变成“和用户可交互”状态。
onPause():
变成“用户可见不可交互”状态.
onStop():
不可见,被下一个Activity所覆盖。
onDestory():
Activity被Kill前调用的最后一个方法.
(2)Activity之间的通信
在Android中一个进程中可能会运行多个不同的Activity实例,也可能在不同的进程中运行不同的Activity实例,所以,我们需要一些特别的机制来实现多个Activity之间传递消息,为此引入了Intent机制.
Intent负责对操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Int-ent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
在应用中,我们可以以两种形式来使用它:
直接Intent:
指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context,Class)来指定)。
通过指定具体的组件类,通知应用启动对应的组件。
间接Intent:
没有指定comonent属性的Intent。
这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。
2Service
android中Service是运行在后台的东西,级别与activity差不多。
既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。
你可以启动一个服务Ser—vice来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。
Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。
你可以在服务中开一个线程,在线程中做耗时动作.
服务一般分为两种:
本地服务:
LocalService 用于应用程序内部。
在Service可以调用Context。
startSer—vice()启动,调用Context。
stopService()结束.在内部可以调用Service.stopSelf()或Servi—ce。
stopSelfResult()来自己停止.无论调用了多少次startService(),都只需调用一次stop—Service()来停止。
远程服务:
Remote Service 用于android系统内部的应用程序之间.可以定义接口并把接口暴露出来,以便其他应用进行操作。
客户端建立到服务对象的连接,并通过那个连接来调用服务.调用Context。
bindService()方法建立连接,并启动,以调用Context。
unbindService()关闭连接.多个客户端可以绑定至同一个服务。
如果服务此时还没有加载,bindService()会先加载它。
3 ContentProvider
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:
采用文件方式对外共享数据,需要进行文件操作读写数据;
采用sharedpreferences共享数据,需要使用sharedpreferences
API读写数据。
而使用C-ontentProvider共享数据的好处是统一了数据访问方式。
2.3。
4BroadcastReceiver
广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。
很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。
应用程序也可以进行广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。
一般流程可分为一下三步:
注册广播事件:
注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver;
另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。
两种方式都需要IntentFIlter.
发送广播