很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(ps:告诉大家一个秘密,其实写写博客对自己的帮助是非常大的哦~)
好了废话不多说,进入主题吧。
一、单人聊天
1)发送消息:
首先要获取一个聊天窗口,getConnection()为获取连接connection的方法,调用getFriendChat()获取
[java]
private Map<String, Chat> chatManage = new HashMap<String, Chat>();// 聊天窗口管理map集合
/**
* 获取或创建聊天窗口
* @param friend 好友名
* @param listenter 聊天監聽器
* @return
*/
public Chat getFriendChat(String friend, MessageListener listenter) {
if(getConnection()==null)
return null;
/** 判断是否创建聊天窗口 */
for (String fristr : chatManage.keySet()) {
if (fristr.equals(friend)) {
// 存在聊天窗口,则返回对应聊天窗口
return chatManage.get(fristr);
}
}
/** 创建聊天窗口 */
Chat chat = getConnection().getChatManager().createChat(friend + "@"+
getConnection().getServiceName(), listenter);
/** 添加聊天窗口到chatManage */
chatManage.put(friend, chat);
return chat;
}
friend为好友名,不是JID;listener 易做图可以传null,利用聊天窗口对象调用sendMessage发送消息
这里sendMessage我传的是一个JSON字符串,以便更灵活的控制,发送消息完成,很简单吧~
[java]
Chat chat = getFriendChat(friend,null);
try {
String msgjson = "{\"messageType\":\""+messageType+"\",\"chanId\":\""+chanId+"\",\"chanName\":\""+chanName+"\"}";
chat.sendMessage(msgjson);
} catch (XMPPException e) {
e.printStackTrace();
}
2)接受消息:
创建一个消息易做图,这里我单独写了一个类
[java]
package com.techrare.listener;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.util.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import com.techrare.utils.XmppConnection;
/**
* 单人聊天信息监听类
*
* @author Administrator
*
*/
public class TaxiChatManagerListener implements ChatManagerListener {
public void chatCreated(Chat chat, boolean arg1) {
chat.addMessageListener(new MessageListener() {
public void processMessage(Chat arg0, Message msg) {
//登录用户
StringUtils.parseName(XmppConnection.getInstance().getConnection().getUser());
//发送消息用户
msg.getFrom();
//消息内容
String body = msg.getBody();
boolean left = body.substring(0, 1).equals("{");
boolean right = body.substring(body.length()-1, body.length()).equals("}");
if(left&&right){
try {
JSONObject obj = new JSONObject(body);
String type = obj.getString("messageType");
String chanId = obj.getString("chanId");
String chanName = obj.getString("chanName");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
}
}
添加监听,最好是放在登录方法中,在关闭连接方法中,移除监听,原因是为了避免重复添加监听,接受重复消息
退出程序应该关闭连接,移除监听,该监听可以接受所有好友的消息,很方便吧~
[java]
TaxiChatManagerListener chatManagerListener = new TaxiChatManagerListener();
getConnection().getChatManager().addChatListener(chatManagerListener);
[java]
connection.getChatManager().removeChatListener(chatManagerListener);
二、多人聊天(会议室)
1)、发送消息
首先要获取会议室对象(MultiUserChat),有两种方法获取
两个方法前面都有讲到,这里再回顾一下
1、创建会议室
[java]
/**
* 创建房间
*
* @param roomName 房间名称
*/
public MultiUserChat createRoom(String user, String roomName,String password) {
if (getConnection() == null)
return null;
MultiUserChat muc = null;
try {
// 创建一个MultiUserChat
muc = new MultiUserChat(getConnection(), roomName + "@conference."
+ getConnection().getServiceName());
// 创建聊天室
muc.create
补充:移动开发 , Android ,