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

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

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

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

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

/**
	 * 获取聊天室的所有成员
	 */
	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();
	}


这篇结束,下篇写写聊天室的一些权限的变更、成员的变更、主题变更什么的。

没有更多推荐了,返回首页