2012-03-29 5 views
1

Ich möchte eine Liste aller (aktiven) Ressourcen einer Person in meinem Dienstplan abrufen. Also zum Beispiel "[email protected]" Ich möchte etwas wie {'gmail', 'pidgin'} bekommen, wenn dieser Benutzer gerade über GMail ('[email protected]/gmail') und Pidgin angemeldet war.Liste aller Ressourcen des Dienstplaneintrags abrufen

Ist das mit Smack möglich? Ich weiß, dass einige Kunden diese Information zeigen und z.B. XMPPHP unterstützt etwas wie getResources(), aber XMPPHP ist für PHP und funktioniert nicht für Google Talk, das hilft mir nicht viel.

Mit freundlichen Grüßen

Antwort

3

Mit Smack müssen Sie Presence-Pakete verfolgen, wie sie empfangen werden. Das "von" der empfangenen Pakete enthält die Ressourcen für die JIDs der Benutzer.

Zum Beispiel:

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

Große, das funktioniert - vielen Dank! –