Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
2014-12-03 23:16
603 查看
上一篇呢说了怎么进入这个聊天室,这次呢,咱就说聊天室里的功能吧,聊天信息、成员变动什么的。还是少说废话,正题:
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();
}
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();
}
相关文章推荐
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(七) 【成员状态、自身状态】
- Android基于XMPP Smack openfire 开发的聊天室(七) 【成员状态、自身状态】
- Android基于XMPP Smack openfire 开发的聊天室(七) 【成员状态、自身状态】
- Android基于XMPP Smack openfire 开发的聊天室(七) 【成员状态、自身状态】
- Android基于XMPP Smack openfire 开发的聊天室(七) 【成员状态、自身状态】
- Android基于XMPP Smack openfire 开发的聊天室(六) 【加入房间、权限错误】
- Android基于XMPP Smack openfire 开发的聊天室(五) 【邀请、被邀请】
- Android基于XMPP Smack openfire 开发的聊天室(四) 【创建房间、表单;报文】
- Android基于XMPP Smack openfire 开发的聊天室(一)【会议服务、聊天室列表、加入】
- Android基于XMPP Smack openfire 开发的聊天室(三) 【新旧记录、踢人】
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack openfire 开发的聊天室(三) 【新旧记录、踢人】
- Android基于XMPP Smack openfire 开发的聊天室(六) 【加入房间、权限错误】