XMPP多用户会议室收到重复消息
设备1向会议室发送消息时“del@conference.jabber.org" 该消息将显示在聊天列表中,并显示会议室发送的重复消息“del@conference.jabber.org". 我被卡住了,为什么我收到重复的信息XMPP多用户会议室收到重复消息,xmpp,smack,muc,Xmpp,Smack,Muc,设备1向会议室发送消息时“del@conference.jabber.org" 该消息将显示在聊天列表中,并显示会议室发送的重复消息“del@conference.jabber.org". 我被卡住了,为什么我收到重复的信息 public void setConnection(XMPPConnection connection) { this.connection = connection; if (connection != null) { PacketFilter
public void setConnection(XMPPConnection connection) {
this.connection = connection;
if (connection != null) {
PacketFilter filter = new MessageTypeFilter(Message.Type.groupchat);
connection.addPacketListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message.getFrom());
String[] parts = fromName.split("@");
String from = parts[0].trim();
messages.add(from + ":");
messages.add(message.getBody());
// Add the incoming message to the list view
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
}
});
}
}
}, filter);
}
}
发送消息在单击按钮时显示,如下所示
Button send = (Button) this.findViewById(R.id.sendBtn);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Message mg = muc.createMessage();
String text = textMessage.getText().toString();
mg.setBody(text);
Log.i("XMPPChatDemoActivity ", "Sending text ");
if (connection != null) {
connection.sendPacket(mg);
messages.add("Me :");
messages.add(text);
setListAdapter();
}
textMessage.setText("");
}
});
这是我为连接会议室而写的
muc = new MultiUserChat(connection, "del@conference.jabber.org");
muc.join("alias name","password");
输出发送消息时收到的信息
me: hello
del: hello
我想要的是当我发送信息时没有重复的信息,即
me: hello
也许你的聊天服务器也给你发了信息 所以您可以在
onClickListener
中手动添加一条消息,然后从服务器接收相同的消息
我认为,不添加来自
onClickListener的消息是正确的-只添加服务器发送的消息。当您在MUC房间时,您会收到所有消息的副本,包括您自己的消息。
-“并将信息传达给每位乘客。”
因此,对于MUC(不是直接消息),如果您同时登录发送和接收(假设您有足够的post访问权限等),您将获得一个副本。在很大程度上,您可以选择不将其登录到send(这是大多数客户端的选择),或者尝试进行智能消息匹配,以检测您何时收到自己的消息并删除它。前一个选项确保每个人都能看到一致的消息排序视图,有些人认为这非常有用。我很确定MUC反映了消息。我把它作为练习留给OP来阅读XEP-45中的相关内容,如果我弄错了,请纠正我。谢谢kev,我阅读了一些关于MUC的文件,并且知道它将在会议室广播该消息。我通过消息匹配解决了我的问题。我面临着同样的问题。你能发布你的答案吗?@Pravin我也面临同样的问题。你是怎么解决的?