2017-02-10 13 views
0

に、ユーザの実際のJIDを取得:私はこのような部屋の居住者を発見するためのコードを持って部屋

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; 
} 

しかし、実体識別子は、部屋のない完全なJID内のユーザーの名前です。万一、ユーザーが別のニックネームに名前を変更した場合、彼は完全なJIDを見つけることができません。

部屋から完全なJIDを取得する方法を教えてもらえますか?

ありがとうございました。

答えて

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を返します。

たJIDのListMultiUserChat返信の

*getOccupants()*が、ユーザが以前に与えられた*MultiUserChat*

に入社しなかった場合、それは悪い要求を送信可能です
関連する問題