gpt4 book ai didi

xmpp - 如何使用 Smack 检索多用户聊天消息中的发件人姓名或其 JID?

转载 作者:行者123 更新时间:2023-12-02 12:46:52 27 4
gpt4 key购买 nike

我正在 Android 中开发基于 XMPP 的聊天应用程序。

我已经完成了一对一聊天功能,但在多用户聊天中遇到了一些问题。我已经成功创建了新的聊天室,多个用户可以加入该房间。我还为 addPacketListener 编写了代码用于与 PacketFilter filter = new MessageTypeFilter(Message.Type.groupchat); 进行群聊

当用户在群组中发送消息时,我也在该监听器中接收消息,但我无法区分哪个用户发送了消息。

像一对一聊天消息包有功能message.getFrom()检索发件人 JID。

在多用户聊天的情况下,相同的函数返回组/房间 JID 作为发送者。

我还尝试在发送message.setFrom(senderJID);时设置消息的属性或message.setFrom(sendername@conference.hostname/Groupname);

我仍然无法获取 senderJID 或其昵称。

所以我的问题是:如何获取发件人用户JID或其昵称?来自 messageListener 中的消息(数据包)

群组发送消息的代码是:-

String to = strGroupJID;
String text = etChatOnTextBox.getText().toString();
if(!text.equals(""))
{
Message msg = new Message(to, Message.Type.groupchat);
msg.setBody(text);
String name1 = xmppConnection.getUser();
name1 = name1.substring(0, name1.lastIndexOf("@"));
name1 = name1 + "@conference.192.168.56.1";
// name1 = name1 + "@conference.192.168.56.1/" + strGroupName ;
msg.setFrom(name1);
muc.sendMessage(msg);
}

接收消息的代码是:-

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());

Log.i("ChatOn", "Text Recieved " + message.getBody()
+ " from " + fromName );
}
}
});

如有任何帮助或建议,我们将不胜感激,谢谢

最佳答案

这段代码将识别聊天室:

String fromName = StringUtils.parseBareAddress(message
.getFrom());

您可以使用此代码来识别聊天室用户的昵称:

String nick = StringUtils.parseResource(message
.getFrom());

这是因为多用户聊天消息的 JID 类似于 roomname@server/nickname,其中用户的昵称是 JID 的资源。

关于xmpp - 如何使用 Smack 检索多用户聊天消息中的发件人姓名或其 JID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com