asmack:在PacketListener中接收自定义IQ消息

时间:2014-09-10 23:03:16

标签: android xmpp asmack

我正在使用asmack库来创建XMPP聊天应用程序。我在接收少量自定义IQ数据包时遇到一些问题。

这是我的PacketListener代码:

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库能够在Tag" SMACK"下的Logcat中接收和打印所有IQ数据包。和前缀为" RCV(1):"。

有关收到PacketListener内所有IQ数据包的建议吗? 如果问题不明确,请通过添加评论告诉我。

2 个答案:

答案 0 :(得分: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

}

然后您创建自己的IQ类实现。

public class YourIQ extends IQ {}

最后

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

答案 1 :(得分:0)