Smack4.20实现单聊通讯与监听(2)

上一篇我们已经粗略的说明了如何连接并且登陆进openfrie,现在开始了解下如何进行通信。

当我们登陆成功后,我们就可以对某个用户发起聊天,代码如下:

 public ChatManager getChatManager() {
        if(chatManager == null){
            chatManager = ChatManager.getInstanceFor(connection);
        }
        return chatManager;
    }
首先,我们得通过connection获取chatManager管理单聊对象,然后:

public void sendChatMessage(String receive, String body) throws Exception {
        //接收人jid
        EntityBareJid jid = JidCreate.entityBareFrom(receive);
        //获取聊天chat
        Chat chat = getChatManageWindows(jid);

        //创建消息对象,消息类型是Message.Type.chat 
        Message message = new Message(jid, Message.Type.chat);
        message.setBody(body);
        //发送消息
        chat.send(message);
    }
注意,这里的的参数receive是接收消息账号的jid,这里jid是每个用户都特有的账号,可以通过登陆openfire来查看每个账号的jid,jid有严格的格式要求,格式如下;
用户名@openfire服务器名称
然后就可以通过JidCreate类来创建jid对象。我这里body参数就是发送的内容,这样就可以发送一个单聊消息,可以通过spark客户端来测试。


单聊消息的监听可以通过实现官方提供的IncomingChatMessageListener监听器接口来监听消息,代码如下:

import android.util.Log;
import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.IncomingChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jxmpp.jid.EntityBareJid;


/**
 * 接收消息监听器
 * Created by ozy on 2017/4/11.
 */
public class InChatMessageListener implements IncomingChatMessageListener {

    @Override
    public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
        //from就是消息的发送方的jid,message即发送的消息对象,chat也就是单聊对象
        //获取from发送方的账号,转换成string即可
        Log.d("text",from.toString());
        //消息内容
        Log.d("text",message.getBody());
    }
}
监听器绑定如下:

InChatMessageListener inListener = new InChatMessageListener(this);
chatManager.addIncomingListener(inListener);
这样我们就可以实现一个简单的单聊应用,由于项目中结合了其他很多不相干的东西,所以只能抽取出来。
下节再来分享下接收离线消息以及好友花名册哈!


你可能感兴趣的:(Android,即时通讯)