【发布时间】:2014-11-14 21:05:31
【问题描述】:
在xmpp 中,当我的用户登录并加入房间时,我是否会收到 MultiUserChat 的 离线消息。
我想像WhatsApp那样实现群聊,请问有其他实现方式吗
提前致谢
【问题讨论】:
标签: android xmpp chat openfire groupchat
在xmpp 中,当我的用户登录并加入房间时,我是否会收到 MultiUserChat 的 离线消息。
我想像WhatsApp那样实现群聊,请问有其他实现方式吗
提前致谢
【问题讨论】:
标签: android xmpp chat openfire groupchat
至少在ejjaberd,当你进入聊天组时,你必须输入你的最后一个时间戳,给定那个时间戳你会收到那一刻的消息。
保存您上一条消息的时间戳,以及您进入房间时的时间戳,如下所示:
MultiUserChat muc = new MultiUserChat(mConnection, room_name);
Log.d(TAG, "JOINING => " + room_name);
DiscussionHistory history = new DiscussionHistory();
if (mLastMessageDate == null)
history.setMaxStanzas(300);
else
history.setSince(mLastMessageDate); //timestamp from your last message
muc.join(mNickName, null, history,
SmackConfiguration.getDefaultPacketReplyTimeout());
希望对你有帮助
【讨论】:
首先以这种方式声明一个 MultiUserChat
私有静态 MultiUserChat muc = null;
然后在你的 oncreate 方法中以这种方式实例化它
muc = new MultiUserChat(CONNECTION, room);
try {
muc.join(USERJID);
} catch (SmackException.NoResponseException e) {
e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
e.printStackTrace();
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
并在您的应用开始时调用此方法
void setMessageListner() {
muc.addMessageListener(new PacketListener() {
@Override
public void processPacket(Packet packet) throws SmackException.NotConnectedException {
Message msg = (Message)packet;
msg.setSubject(msg,getBody);
Logger.i("Received message : "+msg.getBody()+" From "+msg.getSubject());
});
}
这样,每当用户进入 GroupChat 时,他都会收到该组的最后一条消息
【讨论】: