2012-03-29 9 views
1

私の名簿に人のすべての(アクティブな)リソースのリストを取得したいと思います。 例えば、 "[email protected]"のように、そのユーザーが現在Gmail( '[email protected]/gmail')とPidginを使ってログインしていれば、{'gmail', 'pidgin'}のようなものを取得したいと思います。名簿エントリのすべてのリソースのリストを取得

これはSmackで可能ですか?私は一部のクライアントがこの情報を表示していることを知っています。 XMPPHPはgetResources()のようなものをサポートしていますが、XMPPHPはPHP用です.Googleトークでは機能しません。スマックで

敬具

答えて

3

は、あなたは彼らが受信されるとプレゼンスパケットを追跡する必要があります。受信したパケットの「出所」には、ユーザーのJIDのリソースが含まれます。例えば

private XMPPConnection connection; 
private PresenceListener listener = new PresenceListener(); 

public void setConnection(XMPPConnection connection) { 
    this.connection = connection; 
} 

public void createPresenceListener() { 
    connection.addPacketListener(listener, new PacketTypeFilter(Presence.class)); 
} 

public static class PresenceListener implements PacketListener { 
    public void processPacket(Packet packet) { 
     Presence presence = (Presence) packet; 
     if (presence.getType() == null || presence.getType() == Presence.Type.available) { 
      String from = presence.getFrom(); 
      if (from != null && from.lastIndexOf("/") > 0) { 
       String resource = from.substring(from.lastIndexOf("/") + 1); 
       // from here you can track all active resources 
      } 
     } 

    } 
} 
+0

グレート、これは動作します - どうもありがとうございました! –

関連する問題