基于XMPP协议的Android即时通信应用
来源:互联网 发布:mac book pro 型号 编辑:程序博客网 时间:2024/05/22 23:09
这是一个基于XMPP协议的Android即时通信客户端,用的是Smack库,服务器用时Openfire服务器。
Openfire服务器的搭建与开发这里不做介绍,只讨论基于Smack库的Android即时通信客户端。
本客户端实现了文字消息,图片消息,离线通知,群聊,还有其他一些小细节等功能。
核心代码其实就是Smack库的几个方法,其他代码就像其他Android应用开发一样,按照功能需求开发。
不废话,直接上发送消息和接收消息代码:
发送代码:
// send message logic public synchronized void sendMessage(BaseItem baseItem) throws SmackException.NotConnectedException, ConnectException { Chat chat; if (dataManagerInstance.getChats().containsKey(baseItem.getUserJID())) { chat = dataManagerInstance.getChats().get(baseItem.getUserJID()); } else { try { chat = getChatManager().createChat(baseItem.getUserJID()); dataManagerInstance.getChats().put(baseItem.getUserJID(), chat); Log.e(TAG, "sendMessage: sendMsg=" + baseItem.getMesage()); } catch (NullPointerException e) { Log.e(TAG, "sendMessage: getXmppTcpConnectionInstance()==null 没连接服务器 NullPointerException=" + e.getMessage()); throw new ConnectException(); } } Message message = new Message();// this is the name of which send this message; message.setSubject(DataManager.getDataManagerInstance().getCurrentMasterUserName()); message.setBody(baseItem.getMesage()); message.setFrom(Constants.AppConfigConstants.CLIENT_EMAIL); message.setTo(baseItem.getUserJID()); chat.sendMessage(message); dataManagerInstance.collectMessages(baseItem);// show the message in the ChattingRoomFragment createRecentChatRecord(baseItem); }
接收核心代码:
@Override // Receive message logic public void processMessage(Chat chat, Message message) { String JIDFromUserSendMsg = message.getFrom(); if (JIDFromUserSendMsg.contains("/")) { JIDFromUserSendMsg = JIDFromUserSendMsg.split("/")[0]; }// Using a hashmap to manage the chats , which is very conenient to reuse; dataManagerInstance.getChats().put(JIDFromUserSendMsg, chat); String receivedMsg = message.getBody(); String userNameFrom = message.getSubject(); if (userNameFrom == null || userNameFrom.trim().equals("")) { userNameFrom = JIDFromUserSendMsg.split("@")[0]; } if (receivedMsg != null) { Log.e(TAG, "processMessage: receivedMsg=" + receivedMsg); receiveAndSaveMsg(JIDFromUserSendMsg, receivedMsg, userNameFrom, MessageRvAdapter.TEXT_MESSAGE_VIEW_TYPE, "");///暂时设置为null } } private synchronized void receiveAndSaveMsg(String JIDFromUserSendMsg, String receivedMsg , String userNameFrom, int viewType, String imagePath) { MessageItem messageItem = saveTheMessageInfo(JIDFromUserSendMsg, receivedMsg, userNameFrom , true, viewType, imagePath); createRecentChatRecord(messageItem); if (currentActivity != null && JIDFromUserSendMsg .equals(DataManager.getDataManagerInstance().getCurrentChattingUserJID())) {// show massage showMessageIntheChattingRoomFragment(messageItem); } else {// notify coming message notifyComingMessageInStateBar(JIDFromUserSendMsg, receivedMsg, userNameFrom); } }
项目的源码下载以及项目的github管理地址:点击打开链接
1 0
- 基于XMPP协议的Android即时通信应用
- 基于XMPP协议的Android即时通信
- 基于XMPP协议的Android即时通信
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- 基于XMPP协议的Android即时通信系
- int lineByte=(bmpWidth*biBitCount/8+3)/4*4这个公式怎么理解
- 虚拟机搭建CDH-第三讲-虚拟机安装linux1
- HDU 1556:Color the ball
- <%@ page isThreadSafe="true|false" %>
- mysql-5.7.18 zip版安装方式
- 基于XMPP协议的Android即时通信应用
- 数学——洛谷P1045 麦森数
- VC下2、4、8、16、24、32位位图的数据解析与显示
- 89-非阻塞 accept
- ERROR 1044 (42000): Access denied for user ”@’localhost’解决办法
- printf()格式化输出详解
- 决策树学习
- 控制器controller与指令中的link、controller中同名变量作用域的关系
- 二进制位运算(与、或、异或、取反)