我有一个代码来发现像这样的房间居住者:
public List<String> getRoomOccupants() {
List<String> occupants = new ArrayList<>();
DiscoverItems discoItems = null;
DiscoverItems.Item item = null;
try {
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection);
discoItems = discoManager.discoverItems(zipWhipNumber+"@"+roomService);
Iterator<DiscoverItems.Item> occupantsItems = discoItems.getItems().iterator();
while(occupantsItems.hasNext())
{
item = occupantsItems.next();
occupants.add(item.getName());
System.out.println(" EntityID : " + item.getEntityID() + "\n EntityName : " + item.getName());
}
} catch (NoResponseException | XMPPErrorException
| NotConnectedException e1) {
e1.printStackTrace();
}
return occupants;
}
但是EntityID是房间中用户的名称而不是完整的JID。因此,如果用户有任何机会将名称更改为另一个昵称,我将无法找到他的完整JID。
有谁能告诉我如何从房间里获得完整的JID?
感谢。
答案 0 :(得分:0)
必须启用发现服务才能显示此类信息,并依赖于实现和MultiUserChat配置。
可能您无法使用标准发现操作获取此信息。
您可以尝试传递MultiUserChat项目,如下所示:
RoomInfo ri = MultiUserChatManager.getInstanceFor(connection).getRoomInfo("zipWhipNumber+"@"+roomService");
List<String> jidUsers = ri.getContactJids());
或者像这样:
MultiUserChat muc = MultiUserChatManager.getInstance().getMultiUserChat("zipWhipNumber+"@"+roomService");
List<String> jidUsers = muc.getOccupants();
*RoomInformation*
它或多或少是MultiUserChat上的 DiscoveryService 大小。如果没有正确的配置, getContactJids()
将返回null
。
*getOccupants()*
jids的 MultiUserChat 回复的 List
,但如果用户之前没有加入给定的{{1},则可能会发送错误请求}}