我正在开发基于 Android的XMPP的聊天应用程序. 我已经完成了一对一的聊天功能,但在多用户聊天中遇到了一些问题. 我已经成功创建了新的聊天室,多个用户可以加入该会议室. 我还为Pack
我已经完成了一对一的聊天功能,但在多用户聊天中遇到了一些问题.
我已经成功创建了新的聊天室,多个用户可以加入该会议室.
我还为PacketPilter filter = new MessageTypeFilter(Message.Type.groupchat)编写了用于群聊的addPacketListener代码;
当用户在组中发送消息时,我也在该侦听器中接收消息,
但我无法区分哪个用户发送了消息.
像一对一聊天消息包有功能message.getFrom()来检索发件人JID.
在多用户聊天的情况下,相同的功能将组/房间JID作为发送者返回.
我也尝试在发送message.setFrom(senderJID)时设置Message的属性;或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的资源.