当前位置:操作系统 > 安卓/Android >>

Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)

很久没有写博客了,回顾了一下原先学习的,接着没有写完的继续写咯。(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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,