上一篇我们已经粗略的说明了如何连接并且登陆进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);
这样我们就可以实现一个简单的单聊应用,由于项目中结合了其他很多不相干的东西,所以只能抽取出来。下节再来分享下接收离线消息以及好友花名册哈!