目录绪论 (2)一.需求分析 (2)1.1软件功能需求分析 (3)1.2 安全需求分析 (3)二.总体设计 (4)2.1 软件结构图 (4)2.2 功能描述 (4)2.2.1注册功能概要 (5)2.2.2登录功能概要 (5)2.2.3聊天功能概要 (6)2.3 安全设计 (7)三.数据库设计 (7)3.1概念结构设计 (7)3.2逻辑结构设计 (8)3.3物理结构设计 (8)四.详细设计 (8)4.1 用户聊天模块总体流程图 (9)4.2 服务端模块 (9)4.3 客户端模块 (10)五.编码 (15)六.结论 (17)学习体会 (18)致谢 (18)参考文献 (18)绪论随着现代技术的不断输入和信息化的广泛普及,移动网络作为一种新兴事物,在近些年得到了前所未有的普及和深入,移动网络上的各种应用层出不穷,给各个阶层、各个年龄段的用户提供了不同的个性化的服务。
而现代中小型企业的领导认识到进一步提高企业信息化的必要性。
为使企业能在瞬息万变的信息时代生存下去,适应激烈的市场竞争,现代企业要求加强员工之间的交流和通信能力,尤其是领导和员工之间的共同能力,实时的交流系统就是在这种条件下诞生的。
在这个信息化时代,手机已成为继固话之后最为通俗的交流工具,“聊天”成了生活的必需品,这就有了系统下人与人之间的多样会话方式—QQ聊天。
传统会话聊天或许是面对面闲话家常或许是通过打电话进行交流,但都存在各种不便及弊端。
而手机QQ,在手机系统下,占用手机相对很小的空间,系统的记录了QQ好友的信息,不仅突破了各种条件的束缚,减轻了机主的负担,更方便了使用者的通讯交流。
综上所述,本课题主要研究基于Android的移动聊天系统,以更好的用户体验性为目的开发出界面简洁,用户易操作的移动即时通信聊天工具。
该聊天工具的主要功能:用户注册,登录,好友一对一聊天,添加新好友,修改个人信息等。
在该即时通信工具中利用Bmob实现Android端与Bmob服务端的数据操作。
Bmob 对数据的增删改查找做了很好地封装,以及其批量的处理。
客户端之间通过服务器对数据的转发实现相互通信。
一.需求分析随着经济全球化的推进以及企业激烈的竞争,改善企业内部及整个供应链各环节的管理、调度资源配置,迅速适应客户的新需求和市场新机遇,是企业赢得竞争胜利的决定性因素。
需求分析是软件分析中的一个重要步骤。
它的基本任务是要准确地分析出系统应用者的需要,以及系统目标必须具备哪些功能。
这些功能必须准确地,完整地体现出用户的要求。
1.1软件功能需求分析通过对用户需求的市场调查的分析,确定反应用户需求的系统逻辑模型,把整个设计划分成3个单元,分别是程序启动、用户界面、后台服务。
使用Android 和java编程语言及网络数据库相结合,编写一个基于android端的移动聊天系统软件。
这个系统提供多个用户及时并发通信的平台。
未注册用户可以注册成系统成员,已注册用户可以通过登录进入聊天系统。
在系统中用户可以选择与某一个用户聊天,用户可以查找好友或附近的人,可以添加好友或把好友加黑名单等。
➢用户注册:用户在注册界面填入相关正确信息后,后台对其进行处理。
➢用户登录:用户输入自己的QQ帐号及密码后,点击登录,后台对其进行验证,以及好友的查找,登录成功后返回该用户的会话界面。
➢聊天:用户选定聊天对象后,对其发送信息,信息将由后台转发给选定的聊天对象,进行,提示,显示。
➢后台运行用户可以退出主界面,将聊天软件在后台运行,当有消息传入时,消息会用广播的形势显示。
➢后台管理:对用户的管理。
1.2 安全需求分析由于Android系统自身具备的开放源码的特征,它的安全性能成为信息安全领域研究的一个重要课题。
Android的安全性能主要体现在两个方面:Android 的系统安全和数据安全。
Android系统安全是指智能终端本身的安全,是对操作系统的保护,防止未授权的访问及对授权用户服务的拒绝或对未授权用户服务的允许,包括行为检测、记录等措施。
Android的数据安全指确保存储数据完整性、合法性二个方面,要求做到系统正确地传输数据,授权程序顺利地读取数据。
Android安全中的一个重要的设计点是在默认的情况下应用没有权限执行对其他应用程序、操作系统或用户的有害操作,这些操作包括读取用户的隐私数据,访问网络,保持设备活动等等,应用程序的进程是一个安全的黑盒子,在没有给它权限的时候它不能干扰其他应用程序。
二.总体设计系统采用流行的C/S结构模式。
系统的分析设计采用面向对象的技术,应用Visio等工具进行辅助设计。
2.1 软件结构图图2.1 软件结构图2.2 功能描述进入该软件,进入登录界面,如果没有账号,则可以点击立即注册,进入注册界面进行注册,登录进入主界面,显示会话、联系人、设置,通过选择相应菜单进行相关操作。
2.2.1注册功能概要➢输入注册需要的信息,且保证正确➢参与者:用户➢执行者:用户➢前提条件:开启程序,进入注册界面用户注册流程图:图2.2.1 用户注册流程图2.2.2登录功能概要➢判断输入信息格式➢服务器验证输入信息➢跳转进入好友列表界面登录流程图:失败图2.2.2 登录功能流程图2.2.3聊天功能概要➢用户点击联系人列表中的一个好友时,进入聊天界面➢在输入框输入信息,点击发送按钮,发送信息➢好友回复消息是在该聊天页面显示➢当有好友发消息过来时,系统会通过Toast提示➢当QQ在后台运行时有好友发送消息过来时,系统会通过广播的形势告诉用户➢用户聊天后退出聊天界面后,聊天信息保留用户聊天模块总体流程图:图2.2.3 用户聊天模块总体流程图2.3 安全设计通过为不同的用户设计不同的用户视图,和为每一个登录的用户设置密码来实现数据库的安全设计要求。
三.数据库设计3.1概念结构设计图3.1 总体E-R图3.2逻辑结构设计1)用户信息(用户编号,用户账号,用户密码,性别,昵称,头像)2)会话信息(消息编号,好友账号,好友头像,发送/接收消息时间,消息内容)3.3物理结构设计表3-1 用户信息-Users四.详细设计4.1 用户聊天模块总体流程图图4.1.1 用户聊天模块总体流程图4.2 服务端模块在该即时通信工具中利用Bmob实现Android端与Bmob服务端的数据操作。
Bmob对数据的增删改查做了很好地封装,以及其批量的处理。
客户端之间通过服务器对数据的转发实现相互通信。
服务端具体功能:➢注册信息:自动分配10位对象标识,并保存该用户信息,同时将信息返回给客户端。
➢登录信息:检查登录信息是否正确,并向客户端返回登录信息。
如信息正确,则用户可以成功登录,若登录信息不正确,则会提示是哪种登录错误➢聊天信息:转发给消息指定的用户。
➢用户间的联系:将各用户间的关系保存在服务器端,可以在服务器端看出所以QQ用户间的关系。
4.3 客户端模块客户端具体功能➢登录功能:建立与服务器的连接并登录,能显示登录错误信息。
➢界面显示:将好友显示在联系人列表中,并可以通过点击进入会话界面,进行与好友的聊天➢聊天功能:当好友发送消息时显示在会话界面。
用户也同时可以在输入框中输入相应信息点击发送与好友聊天。
➢聊天纪录:能保存聊天纪录,并能察看聊天纪录。
➢信息提示:系统弹出信息提示到来信息,并有声音提示。
➢发送端提示聊天的对方。
➢后台运行:当用户将客户端进行后台运行时,如果有消息传输过来,系统会直接通过广播的形势显示消息的来源以及内容。
用户在客户端点击应用程序图标后启动应用如下图:图4.3.1 客户端启动界面注册登录以后就进入主界面,界面下方有会话、联系人、设置选项,通过选择相应菜单进入相应功能界面,联系人界面如下图所示:图4.3.2 联系人界面通过点击联系人右面的加号添加好友并进入查找好友界面,前提是服务器端存在此用户才能搜索成功,例如搜索456用户,如下图所示:图4.3.3 查找好友界面点击添加按钮,则ymm用户向456用户发送好友添加申请,如果456用户在登录状态则会收到此申请,如果同意ymm的请求添加好友申请,则可以单击同意按钮,如下图:图4.3.4 好友添加请求界面单击同意按钮,则同意ymm的好友添加请求,否则忽视此条好友添加申请消息:图4.3.5 同意好友请求界面同意ymm的申请后,则ymm用户就是自己的好友了,可以与ymm进行对话图4.3.6 与ymm聊天界面退出456账号,登录ymm账号查看,此时可以看到456用户给自己发送的消息提醒条数并可查看相关聊天信息图4.3.7 456用户收到回话提醒及查看消息五.编码ChatActivity.java 用户聊天代码/*** 聊天界面*/public class ChatActivity extends ActivityBase implements OnClickListener,IXListViewListener, EventListener {private Button btn_chat_emo, btn_chat_send, btn_chat_add,btn_chat_keyboard, btn_speak, btn_chat_voice;XListView mListView;EmoticonsEditText edit_user_comment;String targetId = "";BmobChatUser targetUser;private static int MsgPagerNum;private LinearLayout layout_more, layout_emo, layout_add;private ViewPager pager_emo;private TextView tv_picture, tv_camera, tv_location;// 组装聊天对象targetUser = (BmobChatUser) getIntent().getSerializableExtra("user");targetId = targetUser.getObjectId();// BmobLog.i("聊天对象:" + targetUser.getUsername() + ",targetId = "// + targetId);//注册广播接收器initNewMessageBroadCast();initView();}/** * 加载消息历史,从数据库中读出*/private List<BmobMsg> initMsgData() {List<BmobMsg> list = BmobDB.create(this).queryMessages(targetId,MsgPagerNum);return list;}/*** 界面刷新*/private void initOrRefresh() {if (mAdapter != null) {if (MyMessageReceiver.mNewNum != 0) {// 用于更新当在聊天界面锁屏期间来了消息,这时再回到聊天页面的时候需要显示新来的消息int news= MyMessageReceiver.mNewNum;//有可能锁屏期间,来了N条消息,因此需要倒叙显示在界面上int size = initMsgData().size();for(int i=(news-1);i>=0;i--){mAdapter.add(initMsgData().get(size-(i+1)));// 添加最后一条消息到界面显示}mListView.setSelection(mAdapter.getCount() - 1);} else {mAdapter.notifyDataSetChanged();}} else {mAdapter = new MessageChatAdapter(this, initMsgData());mListView.setAdapter(mAdapter);}}public void onSuccess() {ShowLog("发送成功");((BmobMsg) values).setStatus(BmobConfig.STATUS_SEND_SUCCESS);parentV.findViewById(R.id.progress_load).setVisibility(View.INVISIBLE);parentV.findViewById(R.id.iv_fail_resend).setVisibility(View.INVISIBLE);parentV.findViewById(R.id. tv_send_status).setVisibility(View.VISIBLE);((TextView) parentV.findViewById(_send_status)).setText("已发送");}/*** 新消息广播接收者**/private class NewBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String from = intent.getStringExtra("fromId");String msgId = intent.getStringExtra("msgId");String msgTime = intent.getStringExtra("msgTime");// 收到这个广播的时候,message已经在消息表中,可直接获取BmobMsg msg = BmobChatManger.getInstance(ChatActivity.this).getMessage(msgId, msgTime);if (!from.equals(targetId))// 如果不是当前正在聊天对象的消息,不处理return;//添加到当前页面mAdapter.add(msg);// 定位mListView.setSelection(mAdapter.getCount() - 1);//取消当前聊天对象的未读标示BmobDB.create(ChatActivity.this).resetUnread(targetId);// 记得把广播给终结掉abortBroadcast();}}六.结论经过一个学期的学习,实践和教学老师的悉心指导,该仿QQ社交软件系统经过测试,达到了预期的目标,完成了一些基本的功能。