基于XMPP协议的Android即时通信应用

这是一个基于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管理地址:点击打开链接


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值