2014-09-10 72 views
0

我正在爲XMPP聊天應用程序使用asmack庫。我收到一些自定義IQ數據包時遇到了一些問題。

這是我的PacketListener代碼:asmack:在PacketListener中接收自定義IQ消息

PacketTypeFilter filter = new PacketTypeFilter(Packet.class); 
connection.addPacketListener(new PacketListener() { 
    @Override 
    public void processPacket(Packet packet) { 
     Log.i("PacketListener : ", "Received Packet in General : " 
       + packet.toXML()); 
    } 
}, filter); 

它接收一些IQ的數據包,但不接收其他一些IQ的數據包。但是,asmack庫能夠接收並打印標記「SMACK」下的Logcat中的所有IQ數據包並將其打印爲「RCV(1):」。

任何建議接收PacketListener內的所有IQ數據包?
請通過添加評論讓我知道問題是否不清楚。

+0

你已經配置好了定製的智商的IQProvider收到叮噹IQ數據包? – Flow 2014-09-11 11:23:39

+2

您可以請我指出如何配置IQProvider?謝謝。我基本上試圖實現這個XEP:http://xmpp.org/extensions/xep-0167.html – Manjunath 2014-09-12 18:26:27

+0

你得到你的解決方案? @Manjunath – 2017-01-20 07:44:35

回答

3

您需要添加提供者。

例如

myProvider yourProvider = new myProvider(); 
ProviderManager.getInstance().addIQProvider("jingle","urn:xmpp:jingle:1",yourProvider); 

所以asmack監聽那些類型分組。 yourProvider是您的IQProvider

e.g

public class myProvider implements IQProvider { 

@Override 
public IQ parseIQ(XmlPullParser parser) throws Exception { 
    //Parse the incomming call data 

}執行

然後你創建自己的實現智商類的。

public class YourIQ extends IQ {} 

最後

theConnectionObject.addPacketListener(new IQPacketListener() 
      , new PacketTypeFilter(YourIQ .class) { 
     @Override 
     public boolean accept(Packet packet) {//Do your stuff} 
+0

你能分享一下你爲叮噹聲寫的CustomIQProvider和CustomIQ類嗎?謝謝。 – Manjunath 2014-09-23 21:14:01

+0

感謝提示人。投票你的答案。 – Manjunath 2014-09-23 22:41:52

+0

謝謝!我很高興我可以幫助別人一次:) – PvPlatten 2014-09-24 07:28:51