基于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