笪林梅
(江苏财经职业技术学院 机械电子与信息工程学院, 江苏 淮安 223003)
移动互联网时代,人们之间的交流和互动越来越依赖于手机,尤其是当下的大学生们。即时通信(Instant Message,简称IM)已经成为时下应用最为广泛的一种实时通信方式。它建立在因特网和其它有线、无线网络基础之上,是一个集成了交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合性信息平台。
当前,大学生们喜爱的即时通信工具主要有QQ、微信和陌陌等,这些工具的功能已经非常完善。而本论文的研究目的是基于Android技术开发一种适用于校园的多媒体聊天系统,它能够效仿微信,以校园沟通交流为目的,实现用户的注册与登录、好友的管理(增删改查)、好友的一对一聊天、群聊、音视频共享、校园资讯发布等功能。系统界面简洁明了,易于用户操作,能够在校园推广使用。
Android系统是一个开放的移动互联操作系统,它的底层基于Linux,系统架构采用分层模式,从低到高依次是Linux内核层、系统运行库层、应用程序框架层和应用程序层。[1]
Android包含四大组件,即 Activity、Service、BroadcastReceiver和 ContentProvider。[2]Activity是用户和应用程序交互的窗口,可以调用onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()、onRestart()等方法分别实现创建、激活、恢复、暂停、停止、销毁和重启。Service是没有界面的Activity,一般运行于后台,封装一个完整的功能逻辑实现。BroadcastReceiver接受一种或者几种Intent为触发事件,接收相关消息,进行一些简单处理,当这些事件发生时,系统唤醒或传递消息到BroadcastReceiver,以此统一Android的事件广播模型。ContentProvider是Android系统提供的第三方应用数据的访问方案,共享自己的数据给外部来调用,提供数据访问接口。[3]
本系统的主体功能是校园多媒体即时通信,能够满足师生和同学之间会话操作、资讯管理和好友管理三大需求。系统功能结构如图1所示。
图1 系统功能结构图
系统采用C/S架构,服务器端采用Openfire服务器,管理服务器端与客户端之间的连接和会话;客户端采用MVC模式构建。[4]
在客户端,使用Android内置的SQLite作为本地数据库,存储系统信息和本地用户信息,包括好友聊天记录表、群聊天记录表、个人信息表等。在服务器端,使用MySQL,存储用户信息、用户分组和用户关系等。
客户端工作时,向服务器端发送请求,通过XMPP协议获取服务。在通信时,通过GPRS网络,建立双方的连接。[5]
(1)注册模块:实现新用户的注册。
(2)登录模块:用户输入用户名和密码,正确则进入系统;错误则提示用户名不存在或密码错误。
(3)会话操作模块:进行文字聊天、图片聊天、语音聊天、视频聊天等,还可以传送文件。
(4)资讯管理模块:添加、删除、查询各类校园资讯。
(5)好友管理模块:添加、删除、查询好友。
会话操作,可以是单聊,也可以是群聊。
(1)文本的发送。
①获取会话对象:
EMConversation conversation=EMChatManager.getInstance().getConversation(username);
②创建文本:
EMMessage message=EMMessage.
createSendMessage(EMMessage.Type.TXT);
如果是群聊,应做设置“message.setChatType(ChatType.GroupChat);”
③添加文本消息:
TextMessageBody txtBody=new TextMessage-Body(content);
message.addBody(txtBody);
④设置接收消息的用户,把消息加到目标会话对象,发送消息:
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance ().sendMessage(message,new EMCallBack(){});
(2)图片的发送。
和文本消息不同的是,在创建图片时,使用“EMMessage message=EMMessage.createSendMessage(EMMessage.Type.IMAGE);”而在添加图片时,使用“ImageMessageBody body=new ImageMessage-Body(new File(filePath));”。[6]
(3)语音的发送。
语音和文本、图片相似,但创建语音时,参数使用“EMMessage.Type.VOICE”,添加语音时,使用“VoiceMessageBody”类。[7]
(4)接收消息。
①获取消息:
先注册广播,使用“NewMessageBroadcastReceiver msgReceiver=new NewMessageBroadcastReceiver();”,再编写 BroadcastReceiver的相应方法onReceive():
public void onReceive (Context context,Intent intent){
String msgId=intent.getExtras(“msgid”).toString();
String msgFrom=intent.getExtras(“from”).toString();
int msgType=intent.getIntExtra(“type”,0);
Log.d(“main”,“new message id:”+msgId+“from:”+msgFrom+“type:”+msgType);
EMMessage message=EMChatManager.getInstance().getMessage(msgId);}
②获取聊天记录:
EMConversation conversation=EMChatManager.getInstance().getConversation(username|groupid);
List〈EMMessage〉messages=conversation.getAllMessages()
通过资讯模块,师生可以查看资讯,管理员可以发送、删除、修改资讯。
(1)申请资讯阅读权限。
EMGroupManager.getInstance().joinGroup
(“easemob-demo#chatdemoui_1431950354833@con ference.easemob.com”);
(2)获取资讯。
EMGroup group=EMGroupManager.getInstance().getGroup(groupId);//本地资讯
EMGroup group=EMGroupManager.getInstance().getGroup(groupId);//服务器资讯
(1)获取好友列表。
环信支持好友体系,控制发消息的权限。[8]需要事先设置:EMChatManager.getInstance().getChatOptions().setUseRoster(true);
(2)添加好友。
EMContactManager.getInstance ().addContact(toAddUsername,reason);
(3)删除好友。
EMContactManager.getInstance ().deleteContact(username);
(4)同意好友请求。
EMChatManager.getInstance ().acceptInvitation(username);
(5)拒绝好友请求。
EMChatManager.getInstance ().refuseInvitation(username);
本系统进行了测试,会话、校园资讯运行界面如图2~3所示。
图2 会话界面
图3 校园资讯界面
系统适用于大中专院校学生,具有校园特色,师生、同学之间可以无障碍地交流、沟通和互动,传输各种图片、文本和文件,分享校园资讯。操作简单、功能实用,但在界面美观和功能拓展上还有待进一步提升。
[1]郭金尚.Android经典项目案例开发实战宝典[M].北京:清华大学出版社,2013.
[2]施懿民.Android应用测试与调试实战[M].北京:机械工业出版社,2013.
[3]罗雷,韩建文,汪杰.Android系统应用开发实战详解[M].北京:人民邮电出版社,2014.
[4]孟贺.基于Android的即时通讯系统的设计与实现[D].济南:山东大学,2014.
[5]肖莉.基于P2P校园即时通信系统设计与实现[D].成都:电子科技大学,2012.
[6]秦建,邹凯,邰龙东,朱东亚,林春喜.基于Android的校园移动信息平台设计与实现[J].电脑编程技巧与维护,2015(9):54-55.
[7]张梦琦.基于Android平台的移动智能点餐系统客户端设计[J].软件导刊,2014(5):96-97.
[8]丁永明,纪方明.基于Android平台移动学习软件的研究与实现[J].数字通信世界,2011(1):66-68.