我正在使用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数据包的建议吗?
如果问题不明确,请通过添加评论告诉我。
答案 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)