1、Android智能手机平台上多媒体短信通信系统设计开发可行性方案Android智能手机平台上多媒体短信通信系统设计开发可行性方案【摘要】多媒体短信系统是在智能手机平台(本文使用Android手机平台)上开发的一个通信软件,它可以在安装本软件的手机用户之间发送多媒体短信(包括文字、图片、动画、音频、视频)。该系统分服务器端和客户端,客户端与服务器端通过Socket建立连接,用户之间以JSON数据的形式传送数据。【关键词】多媒体短信;Android;通信;Socket; JSON引言随着计算机技术和通信技术的快速发展以及人们对信息交流的需求的不断增长,方便快捷的手机逐渐成为人们必不可少的通信工具,
2、成熟的语音通信功能基本满足了人们对信息交流的基本需要,但是会产生比较高的语音通信费。目前的手机短信功能相对比较简单,基本上以发送文本信息为主,虽然也可以发送彩信(彩信可以用于传送文字、图片、动画、音频、视频等多媒体信息),但是彩信的大小有限制,而且费用也相对比较高。目前的形势是使用智能手机和3G网络的人越来越多,智能手机上搭载的一般都是3G网络,而且智能手机还可以使用wifi,也就是说在智能手机上传输网络数据会相比以前快得的。现在网络通信技术发展很快,3G网络已经很普遍,传输速度相对以前有质的提升,原来GPRS的最大传输速度184kbit/s,而现在的3G网络可以达到2Mbit/s。目前使用3
3、G网络的用户越来越多,利用3G网络传输速度快的特点可以在手机上开发一个软件,利用网络来发送多媒体信息,这样不仅可以即时通信,而且还可以省去相当一部分费用。因此,未来的发展趋势是用户更多的利用网络聊天软件来交流。 目前手机上的聊天软件主要有中国移动的飞信,腾讯的QQ,腾讯的微信,这些聊天软件应用普遍,非常受人们的欢迎。飞信的特点是实现了电脑与手机端的交互,当手机端不在线时可以以短信的形式发到用户手机上。腾讯的QQ应该是使用最普遍的,同时在线用户已超过1亿。腾讯的微信是近几年新出现的,也非常受人们的欢迎,充分利用了智能手机的功能。但是他们做的还不是很完美,不能让所有人都满意,开发一款令人们焕然一新
4、的软件也许会受到人们的喜爱。前面三者都是交友类软件,可以满足好友间方便通信。但是我发现目前的婚恋网有很多,但是这些网站都有一个特点,就是可以浏览到相亲对象,但是获取相亲对象的联系方式却是很是不便,大部分都需要交钱,即使不需要交钱一般也得不到相亲对象的联系方式,拿珍爱网来说,当你想得到感兴趣对象的联系方式时,不交钱也可以得到对方的联系方式,但是概率比较小,除非你条件特别好,在该网站人气很高,这显然是满足不了大众的需求的,大众需要的是对于感兴趣的对象,只要对方同意给我联系方式我就可以得到对方的联系方式。因此,我们可以在好友通信的基础上增加一个牵红线功能,我想如果这样的话预期可以得到很多人的喜欢。目
5、前智能手机平台android发展很快,市场份额已排第一,超过苹果,前景广阔。而且android系统已成为全球应用最具有广泛影响力的手机操作系统,三星、摩托罗拉等手机厂商巨头已经纷纷倒戈,投向Android阵营。Android手机平台是一个真正开放式的平台,无须支付任何费用即可使用,因此智能手机平台我们选择使用Android平台,在Android平台上开发多媒体短信系统,该系统的目标是在安装该软件的用户之间通过网络传送多媒体信息,多媒体信息包括文字、图片、动画、音频、视频,这样可以方便用户之间的交流,利用网络通信还可以为用户节省相当一部分费用。1 系统概述 该系统是运行在android手机上的通
6、信软件,好友之间可以发送多媒体信息,包括文字、图片、音频、动画、视频。1.1系统的功能概述该系统的功能主要有三大块,分别是:好友管理、发送多媒体信息、软件国际化。好友管理的功能如下: 查找好友 添加好友 删除好友 修改好友显示信息发送多媒体信息功能: 发送文字信息 发送图片(可以使用拍照功能得到的图片) 发送动画 发送音频(可以使用录音功能得到的录音文件) 发送视频(可以使用摄像功能得到的视频文件)软件国际化根据手机的语言环境给用户展示对应的语言文字。目前该系统只支持英文和中文。1.2 实现系统的技术概述服务器端与客户端在总体设计使用MVC架构。服务器端与客户端都采用Java语言。服务器端使用
7、简单易用的Mysql数据库,客户端使用占用体积小、开源的、Android自带的sqlite3数据库。客户端与服务器端采用Socket通信,通过json传送数据。服务器一直监听客户端的连接,每当有客户端请求连接时就给客户端分配一个线程来处理客户端的交互,接着继续监听客户端的连接,并把客户端的Socket对象存放起来,当他的好友给该用户发送消息时服务器通过该Socket给用户发送信息。客户端给服务器发送的都是json字符串,当服务器接收到客户端发送来的消息时首先判断客户端的请求类型,根据客户端的请求类型(比如说请求登录)来做相应的处理,然后返回数据给客户端,客户端也是根据服务器返回的消息得到返回类
8、型,根据返回类型(比如说返回好友信息)做相应的处理。客户端发送二进制数据技术概述:首先将待发送的二进制数据(图片、音频、视频)转化成字节数组,然后将字节数组经Base64转化为字符串,然后封装到json数据里面发送给好友。用户给好友发送的消息对象里面会封装来自哪个用户,要发送给哪个用户,以及请求类型。当服务器收到该消息时会转发给对应的好友。发送信息主要分为两类:发送文字信息和发送二进制信息。文字信息可以直接嵌入到JSON数据里面,但是二进制数据是不能直接嵌入到JSON数据里面的,可以通过Android里自带的一个工具类Base64将字节数据转换为字符串,这样有三个好处: 可以起到保密作用 防止
9、解析JSON数据时出现异常 可以将数据存放到JSON数据里面,不用再用额外的方式传送二进制数据。2 系统需求分析为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求,对软件需求的深入理解是软件开发工作获得成功的前提条件,因此我们对该系统的需求做出了认真的分析。2.1 功能描述这方面的需求指定系统必须提供的服务,通过需求分析应该划分出系统必须完成的所有功能。2.1.1 好友管理作为一款聊天通信软件,用户可能会有很多好友,好友管理是用户常用的功能,聊天用户可以对自己的好友进行管理,包括查找好友、添加好友、删除好友,修改好友在本地的显示信息。 (1) 查找好友 当用户好友过多时,用户想打到要
10、聊天的好友可能不那么容易。因此为用户提供查找好友功能,只要输入用户的信息就可以找到想找的好友。用户可以根据多个条件查找好友,比如:性别,年龄段,用户名,昵称等等。 (2) 添加好友 用户刚开始是没有好友的,但是可以添加感兴趣的好友,当然也可以被其他用户添加。当用户主动添加其他用户为好友时,需要得到对方的认可后才可以成功添加对方为好友。当被其他用户添加好友时,服务器会让用户确认是否要添加对方为好友,用户可以选择添加也可以选择拒绝添加对方为好友。 (3) 删除好友 当用户好友过多或者想删除某个好友时可以删除好友,当用户成功删除某好友时,对方的好友列表里也将用户删除,即两者不再具有好友关系。2.1.
11、2 发送信息发送聊天信息是该软件的核心功能,用户可以发送多媒体信息,包括文字、图片、动画、音频、视频。用户发送文字消息具有即时性,如果用户在线则可以立即收到好友发送的消息。(1)发送文字信息 用户可以发送文字信息给自己的好友,如果好友不在线将信息存储到服务器,当好友上线时再发送给好友。用户接收到的信息会存储到数据库中,当同一用户再次登录后可以看到自己的聊天记录。当自己和好友聊天时,如果其他的好友发送消息过来则给予声音提示,并加入到最近聊天好友列表里。 (2) 发送图片 用户可以给在线用户发送图片,当用户不在线时不可以发送图片。发送图片时用户可以选择手机内存卡里已经存在的图片,也可以进行拍照后将
12、拍照的图片发送给好友。用户接收到的信息会存储到数据库中,当同一用户再次登录后可以看到自己的聊天记录。当自己和好友聊天时,如果其他的好友发送消息过来则给予声音提示,并加入到最近聊天好友列表里。 (3) 发送音频 用户可以给好友发送音频,当用户不在线时不可以发送音频。音频包括自己录音录下来的声音文件和其他Android手机支持的音频。用户接收到的信息会存储到数据库中,当同一用户再次登录后可以看到自己的聊天记录。当自己和好友聊天时,如果其他的好友发送消息过来则给予声音提示,并加入到最近聊天好友列表里。 (4) 发送视频 用户可以发送视频给好友。当用户不在线时不可以发送视频文件。视频包括自己拍摄的视频
13、和Android手机支持的视频文件。用户接收到的信息会存储到数据库中,当同一用户再次登录后可以看到自己的聊天记录。当自己和好友聊天时,如果其他的好友发送消息过来则给予声音提示,并加入到最近聊天好友列表里。2.1.3 其他功能(1) 实现软件的国际化全球化的Internet需要全球化的软件,引入国际化可以为用户提供自适应、更友好的用户界面。该软件需要在不同区域使用而呈现出本地语言的提示。一款好的软件可能会被多个国家的人使用,但是他们的语言可能不同,全世界有多种语言,该软件会根据手机语言的环境,软件界面使用对应的语言内容。比如:如果用户手机的语言环境为中文则软件界面上的文字使用中文,如果用户手机的
14、语言环境为英文则软件界面上的文字使用英文。(2) 进入软件欢迎界面当用户打开该软件时,给用户显示一个欢迎界面,现在成熟的软件都有一个欢迎界面,欢迎界面成为一个软件的唯一标志。(3) 用户登录注册用户登录后才可以使用该软件的全部功能,没有注册的用户注册后才可以登录。登录时需要用户填入用户名和密码。注册时需要用户填入用户名,密码,昵称,Email,年龄,性别等信息。(4) 消息到来提醒当用户有新消息时,要给用户以声音提示。另外,当有新好友添加用户为好友时也会发出声音提示,提示有新用户要添加用户为好友。2.2 数据流图为了描绘信息流和数据从输入移动到输出的过程中所经受的变换,及数据在软件中流动和被处
15、理的过程,特用以下数据流图来形象的表示。首先从用户出发,用户需要登录,对于没有注册的用户需要注册后才能登录本系统,登录后可以和好友进行聊天,可以发送多媒体信息。图 2.1 数据流图2.3 实体联系图 为了把用户的数据要求清楚、准确地描述出来,建立一个概念性的数据模型,它描述了从用户角度看到的数据,反映了用户的现实环境。图2.2 系统实体联系图用户(账号,密码,昵称,性别,年龄,Email,状态) 好友聊天(用户账号,好友账号)2.4 性能需求 该软件要能安装在大部分的安卓手机上,并可以正常的运行。 用户要能及时的收到好友发送过来的消息,延迟不得超过3秒。 对于用户发送的消息要给予一定的加密。在
16、安全性上要做一定的处理。3系统概要设计根据上面的需求分析设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,用较低成本开发出较高质量的软件系统。3.1系统的体系结构与设计思想根据需求分析把系统的整体架构设计出来,用一张图形象直观地展示出来。设计思想描述了系统的设计过程与思想。3.1.1 系统的体系结构系统的体系结构从整体上描述了系统的架构,描述系统内部的运行流程。首先由客户端发起请求,服务器在收到请求后根据请求类型做相应的业务逻辑处理,逻辑处理会与数据库交互,业务逻
17、辑处理完后返回数据给客户端,客户端根据服务器的返回数据的类型做相应的业务逻辑处理,往本地数据库保存数据或者从本地数据库查询数据,然后给用户展示界面。图 3.1 系统体系结构3.1.2 系统的设计思想本系统的核心是手机用户之间通过本系统利用网络发送多媒体消息,即时通信。因为是即时通信,需要客户端与服务器端保持长久连接,而传统的Http协议一般不是保持长久连接,目前有种技术叫服务器推送技术,这个技术可在Http协议下保持长久连接;另外一种方式是通过socket与服务器端建立长久连接,这样可以实现即时通信。对于以上两种方式,该系统使用socket方式通信。 服务器端一直监听客户端的连接,每当有客户端
18、连接服务器时,服务器新建一个线程来处理客户端的请求操作,也就是说一个客户端对应一个线程。当客户端连接到服务器时将客户端的socket保存到服务器中,以便读取客户端信息和给客户端发送信息。当客户端给好友发送消息时,首先传送给服务器,服务器从保存的socket中找到对应好友的socket,然后通过好友的socket给好友发送信息。信息的传递是以Json数据的形式在用户之间传输,对于二进制刚将二进制文件用Base64将字节转换为字符后再以Json的形式传输。3.2 系统功能模块设计根据系统的整体架构把系统分为多个子模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体。3.2.1 系统总体功能
19、模块根据系统的需求分析,将系统划分为如下几个模块:登录模块,注册模块,添加好友模块,删除好友模块,查找好友模块,发送文字信息模块,发送二进制文件模块。3.2.2 系统总体流程用户从开始登录到退出本系统的一个总体流程用下图来展示。用户在主界面与聊天界面停留时间最长,也是系统的核心功能所在。图3.2 总体流程图3.3 系统主要模块设计把系统分成多个小模块有助于系统的实现,因此我们把系统分成多个模块。3.3.1用户登录模块 用户登录前需要输入用户和密码,用户名和密码不能为空,否则提醒用户。登录时首次与服务器连接,如果网络不可用或者服务器端程序没有打开,则会提示用户连接超时。连接成功后则一直保持连接,
20、服务器分配一个单独的线程用来处理该用户的所有请求并保存用户的Socket对象,直到用户退出系统连接才会断开。连接成功后首先要做的就是把用户的登录信息(包括用户名、密码、在线状态、请求类型)转化为Json数据,然后发送给服务器端,服务器端在接收到请求信息后根据用户的请求类型做相应的处理,处理完后给客户端返回数据,返回的数据信息包括返回类型及相应的返回信息。客户端在收到返回的数据后,根据返回类型做相应的处理,展示相应的信息给用户。3.3.2查找好友模块用户可以查找感兴趣的好友以便进行添加。用户可以根据用户名、昵称等与用户相关的信息来查找感兴趣的好友,根据用户输入的关键字,把查找好友请求信息封装成J
21、son数据,然后传送给服务器端,服务器端根据请求类型从数据库中搜索相关好友,然后把搜索出来的好友组装成Json返回给客户端,客户端根据返回类型做出相应的处理,把查询出来的好友信息展示给用户。3.3.3 发送文本信息模块当用户选择自己的某个好友时就可以和好友聊天,用户发送文本前需要输入发送内容,不能为空,为空时提醒用户输入发送内容。根据用户输入的聊天内容,信息封装成Json数据,以便传输。然后发送给服务器端,服务器端根据请求类型来处理文本消息的转发,转发过程如下:客户端发送过来的主要信息包括用户名,好友用户名,请求类型,消息内容,时间等,服务器端程序根据好友用户名查找到好友的Socket,用户登
22、录时都已经保存过Socket了,通过这个Socket可以得到输入流和输出流,通过输出流把消息转发给好友。这样就完成了消息的转发。3.3.4发送二进制模块在本系统中用户可以发送的二进制文件包括图片,动画,音频,视频。首先让用户选择二进制文件的来源,可以来自本地,也可以经拍照、录音、录像得到的二进制文件。发送图片、动画、音频和视频的请求类型是不一样的。把待发送的二进制文件转换字符串,封装到Json数据里面,然后发送给服务器端,服务器端程序根据客户端的讲求类型和好友用户名进行转发,客户端在接收到数据后提取出二进制文件的内容,保存内容到本地。并通知界面展示。3.4 数据库设计由功能模块的划分,涉及到两
23、个数据库,服务器端的数据库与客户端的数据库。3.4.1 服务器端数据库设计用户表:用户名,密码,昵称,Email,性别,年龄,在线状态。状态表:五种状态(在线,离开,隐身,忙碌,下线)。好友关系表:用户名,好友用户名(用户和好友是相互的,不区分先后)。未读消息表:用户名,好友用户名,消息内容,发送时间。添加好友验证信息表:用户,被添加好友,验证信息。3.4.2 客户端数据库设计聊天内容表:好友名,接收消息好友名,文字消息,时间,是否查看,类型(图片,音频,视频),文件名。说明:当发送的消息是二进制消息时文件名才起作用。最近好友表:好友用户名,昵称,是否有未读信息,时间。3.5 系统中的实体类与
24、对象3.5.1 服务器端主要的类Server类:该类用来监听客户端的连接,每当有客户端连接时就给该客户端分配一个线程(SocketThread),用该线程来处理客户端的操作。该类一直处于监听状态,除非服务器关闭。图3.3 Server类SocketThread类:该类是一个线程类,用来处理客户端的各种操作与请求。每当客户端有请求时服务器会做相应的处理,并返回数据给客户端。图3.4 SocketThread类UserService类:该类是一个服务类,用来处理和用户相关的操作,比如用户的登录操作、注册操作、查找好友操作、查询好友登录状态等操作。图3.5 UserService类TextMsg.j
25、ava 类。该类也是一个实体类,封装了用户发送文字信息时的信息以及得到和设置类属性的相应方法。这些属性包括用户名,用户昵称,消息内容,发送时间,接收信息的好友,以及请求类型。该类是系统的主类,因为用户发送文字信息最多。图3.6 TextMsg类DBHelper类:该类是一个帮助类,用来和数据库打交道,所有对数据库的操作都会经过该类,该类封装了对数据库增删改查的方法。图3.7 DBHelper类3.5.2 客户端主要的类MainActivity类:该类用来给用户展示一个登录界面,在这个界面用户可以完成登录操作,以及设置用户登录时的状态。如果用户还没有账号则可以进行注册,注册完成后再登录。图3.8
26、 MainActivity类ChatingActivity类:该类是用户和好友的聊天界面。这个类主要有两个功能:展示用户聊天内容和向好友发送信息(包括二进制信息)。用户在文本框中输入文字就可以发送文字信息。用户发送照片有两个选择:发送本地已经存在的图片和经拍照拍摄下来的图片。用户发送音频也有两个选择:发送本地已经存在的音频和经录音录下来的音频。用户发送视频也有两个选择:发送本地已经存在的视频和经录相录下来的视频。图3.9 ChatingActivity类AddFriendConfirmActivity类:该类给用户提供一个界面,当有人想添加用户为好友时,让用户选择是拒绝添加好友还是同意添加对方
27、为好友。SocketSingle类:该类是客户端的主类,用来接收服务器端返回的消息,并发送广播告知客户端做出相应的操作。该类一直等待服务器端返回消息,一有消息返回就做出处理。图3.10 SocketSingle类MChatContent类:该类是一个服务类,处于Model层,用来处理和聊天记录相关的操作。比如界面销毁后再次打开界面时显示聊天记录。该类与本地的数据库交互。类3.11 MChatContent类DatabaseHelper类:该类是一帮助类,用来和本地的数据库打交道,封装了操作本地数据库的增删改查操作。 图3.12 DatabaseHelper类部分类的继承关系如下:其中Activ
28、ity是所有界面展示类的基类,ListActivity主要是用来展示列表内容的,而TabActivity以选项卡的形式存放多个Activity。ContentActivity继承于TabActivity,包含ChatActivity、ContantActivity、FindActivity、SettingActivity。 图3.13 部分类关系图4 系统详细设计及实现下面对本系统进行详细设计及实现4.1 系统平台选择 针对Android平台的开放性和目前Android平台的迅猛发展,智能手机平台我们选择Android平台。开发环境的选择:针对windows的界面友好和易操作性,我们选择wid
29、nows平台为开发环境平台。开发工具使用最受人们欢迎的Eclipse4.2 数据库的选择服务器端:服务器端数据库我们选择Mysql。MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。它支持多线程,能充分利用CPU资源 ;优化的SQL查询算法,有效地提高查询速度;提供TCP/IP、ODBC和JDBC等多种数据库连接途径;.提供用于管理、检查、优化数据库操作的管理工具;可以处理拥有上千万条记录的大型数据库。客户端:客
30、户端的数据库我们使用Android平台集成的sqlite3数据库。在Android平台上,集成了一个嵌入式关系型数据库SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段
31、中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息。4.3 用户主要界面设计及实现4.3.1 登录功能根据需求分析,用户登录时需要用户名和密码,因此需要给用户提供两个文本框,一个是用来接收用户名的,一个是用来接收密码的,在文本框的前面用文字提醒是用户名还是密码,以示区别。对于首次使用本系统的用户需要注册,因此还需要提供两个按钮,一个是登录按钮,一个是注册按钮。用户登录后可以给好友展示不同的在线状态,因此给用户提供一个下拉框让用户选择在线状态,在线状态包括:在线(默认),离开,忙碌,隐身。下图为登录界面,对应的类为:MainActivity.java图4.1 登录界面下图是用户登录时的时序图。用户点击登录按钮时会调用SocketSingle对象,SocketSingle类使用了单例设计模式,在本系统中SocketSingle对象只有唯一的一个,第一次调用SocketSingle对象时会与服务器连接,客户端连接服务器代码如下:socket = new Socket(); socket.connect
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1