6

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

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

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

就像一对一的聊天消息包具有message.getFrom()检索发送者 JID 的功能。

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

我也尝试在发送时设置 Message 的属性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 );
           }
        }
   });

感谢您提供任何帮助或建议谢谢

4

2 回答 2

3

您的这段代码将识别聊天室:

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

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

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

这是因为多用户聊天消息的 JID 看起来像roomname@server/nickname,用户的昵称是 JID 的资源。

于 2014-08-14T13:03:39.030 回答
0

如何获取发件人用户 JID 或其昵称?来自 messageListener 中的消息(数据包)

如果您查看 XEP-45 7.4,您将看到 from JID 是 MUC 的裸 JID 加上 MUC 的成员昵称作为资源。所以昵称是from JID的资源。

如果房间是非匿名的,您可以在扩展存在信​​息中获取住户的完整 JID ( XEP-45 7.2.4 )

于 2014-08-14T12:28:24.370 回答