您的位置:首页 > 移动开发 > Android开发

Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】

2014-03-05 15:25 381 查看
上一篇呢说了怎么进入这个聊天室,这次呢,咱就说聊天室里的功能吧,聊天信息、成员变动什么的。还是少说废话,正题:

1,说要聊天呢,简单就是一个文本信息,当然我们不能时时去服务器获取信息。要充分发挥即时推送嘛。

      (1)首先要添加一个监听,muc.addMessageListener(chatListener);   要是muc不知道是什么请看上一篇吧,这就不多解释。chatListener就是我们的监听器,看代码,其实下边的代码有些啰嗦。我只是懒得改了。最近有点烦躁。这里我们主要获取的就是Packet,这个是一个XMPP包装好的XML流,里边有你想要的东西。有兴趣深入的朋友可以上XMPP中文翻译组去看看,挺犀利的。

[java] view
plaincopyprint?

/** 

     * PacketListener 通过一个规定的过滤器提供一个机制来监听数据包 

     *  

     * @author liaonaibo 

     *  

     */  

    class ChatPacketListener implements PacketListener {  

        private String _number;  

        private Date _lastDate;  

        private MultiUserChat _muc;  

        private String _roomName;  

  

        public ChatPacketListener(MultiUserChat muc) {  

            _number = "0";  

            _lastDate = new Date(0);  

            _muc = muc;  

            _roomName = muc.getRoom();  

        }  

  

        @Override  

        public void processPacket(Packet packet) {  

            Message message = (Message) packet;  

            String from = message.getFrom();  

  

            if (message.getBody() != null) {  

                DelayInformation inf = (DelayInformation) message.getExtension(  

                        "x", "jabber:x:delay");  

                Date sentDate;  

                if (inf != null) {  

                    sentDate = inf.getStamp();  

                } else {  

                    sentDate = new Date();  

                }  

  

                Log.i(TAG, "Receive old message: date="  

                        + sentDate.toLocaleString() + " ; message="  

                        + message.getBody());  

  

                android.os.Message msg = new android.os.Message();  

                msg.what = RECEIVE;  

                Bundle bd = new Bundle();  

                bd.putString("from", from);  

                bd.putString("body", message.getBody());  

                msg.setData(bd);  

                handler.sendMessage(msg);  

            }  

        }  

    }  

2,下边就是成员了,一个聊天室没成员多离谱的事情啊,我们主要做的是把成员列表逃出来。其实有几种方法可以弄出来的,我只是简单的获取成员的昵称。可能有朋友会问为什么不获取成员的信息呢。这个下一篇我会告诉你。

[java] view
plaincopyprint?

/** 

     * 获取聊天室的所有成员 

     */  

    private void getAllMember() {  

        Log.i(TAG, "获取聊天室的所有成员");  

        affiliates.clear();  

          

        new Thread(new Runnable() {  

            @Override  

            public void run() {  

                try {  

                    Iterator<String> it = muc.getOccupants();  

                    while (it.hasNext()) {  

                        String name = it.next();  

                        name = name.substring(name.indexOf("/") + 1);  

                        affiliates.add(name);  

                        Log.i(TAG, "成员名字;" + name);  

                    }  

  

                } catch (Exception e) {  

                    e.printStackTrace();  

                }  

  

                android.os.Message msg = new android.os.Message();  

                msg.what = MEMBER;  

                handler.sendMessage(msg);  

            }  

        }).start();  

    }  

这篇结束,下篇写写聊天室的一些权限的变更、成员的变更、主题变更什么的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: