2013-05-15 9 views
5

Sto sviluppando un'applicazione di chat per Android che utilizza asmack. La connessione si sta consolidando e sono anche in grado di effettuare il login. Ho aggiunto listener per i pacchetti IQ e funziona perfettamente. Ho aggiunto ascoltatore per i pacchetti di presenza anche, qui è il mio codice:L'ascoltatore di presenza non funziona in caso di smarrimento

PacketTypeFilter presenceFilter=new PacketTypeFilter(Presence.class); 

connection.addPacketListener(new PacketListener() { 
    public void processPacket(Packet packet) { 
     Presence presence = (Presence)packet; 

     Log.d("test1","Presence packet came :From:"+presence.getFrom()+",Packet ID:"+presence.getPacketID()+",Priority:"+presence.getPriority()+",To:"+presence.getTo() 
          +",Exn:"+presence.toXML()); 

     if (presence.getType() == Presence.Type.available) { 
      Log.d("test1","User available"); 
     } 
     else if (presence.getType() == Presence.Type.unavailable) { 
         Log.d("test1","User not available"); 
     } 
    } 
}, presenceFilter); 

Il mio problema è, questo listener non è mai sempre chiamato da qualsiasi pacchetto di presenza in ingresso. Funziona per quelli in uscita. Non riesco a utilizzare il servizio Gestione per la presenza poiché il nostro server utilizza un Servizio di routing intelligente per la gestione della disponibilità degli utenti. Sto facendo qualcosa di sbagliato qui? Qualsiasi input sarà utile.

risposta

-2

Se non è possibile utilizzare il roster, si è sicuri che ogni presenza venga inviata a questo cliente in primo luogo?

L'utente con il quale il client è connesso con il roster di altri utenti sulla rete?

Avete testato l'invio esplicito di un pacchetto di presenza al client utilizzando un client in cui è possibile modificare l'xml raw?