用于自定义IQProvider的aSmack PacketListener无法正常工作

时间:2014-08-01 21:46:31

标签: android xmpp asmack

我为我想要接收的协议创建了一个自定义IQProvider类。提供程序eppears工作正常,因为自动响应不会发送回服务器有关未实现的消息类型。

这是我的提供者:

public class OA_IQProvider implements IQProvider{

public static final String NAMESPACE = "connect.logitech.com";
public static final String ELEMENT_NAME = "oa";
public static final String result = "RESULT";
private Map<String, String> list = new HashMap<String, String>();

@Override
public IQ parseIQ(XmlPullParser parser) throws Exception
{
    boolean stop = false;
    String name = parser.getName();

    while(false == stop)
    {
        switch (parser.getEventType())
        {
            case XmlPullParser.START_TAG:
            {
                if(ELEMENT_NAME.equals(name))
                {
                    list.put(result, parser.getText());
                }

                break;
            }
            case XmlPullParser.END_TAG:
            {
                stop = ELEMENT_NAME.equals(name);
                break;
            }
        }
    }
    name = null;
    return new OA_IQ(list);
}

}

public class OA_IQ extends IQ
{
    public static final String ID = "servertime";
    private Map<String, String> list;

    public OA_IQ(Map<String, String> l)
    {
        list = l;
    }

    @Override
    public String getChildElementXML()
    {
        return null;
    }

    public String getResult()
    {
        return list.get(OA_IQProvider.result);
    }
}

在我的主要活动中,我添加了此提供程序:

ProviderManager.getInstance().addIQProvider(OA_IQProvider.ELEMENT_NAME, OA_IQProvider.NAMESPACE, new OA_IQProvider());

我已经实现了以下PacketListener:

        conn2.addPacketListener(new PacketListener() {
            @Override
            public void processPacket(Packet p) {
                Log.d(TAG, p.toXML());
            }
        }, new PacketTypeFilter(Packet.class));

我还尝试了各种其他过滤器,例如IQFilters。 在调试日志中,我收到消息:

08-01 23:13:45.188  22174-23246/com.xxx.testingapp D/SMACK﹕ 11:13:45 PM RCV  (1105212208): <iq id="v3" to="guest" type="get"><oa xmlns='connect.logitech.com' mime='vnd.logitech.connect/vnd.logitech.pair' errorcode='200' errorstring='OK'><![CDATA[serverIdentity=xxx:hubId=97:identity=xxx:status=succeeded:protocolVersion={XMPP="1.0", HTTP="1.0", RF="1.0"}:hubProfiles={Harmony="2.0"}:productId=Pimento:friendlyName=xxx]]></oa></iq>

我想要完成的是从服务器响应中获取身份。我已经尝试查看调试源代码,因为基本上我要完成的是调试功能已经完成的内容。但我无法找到解析PM RCV的位置。

也许我的问题是PacketListener没有捕获PM RCV?

0 个答案:

没有答案