【问题标题】:How can I create, send and receive IQ packets using Smack 4.1如何使用 Smack 4.1 创建、发送和接收 IQ 数据包
【发布时间】:2015-07-24 13:03:31
【问题描述】:

我需要将 IQ 数据包发送到 XMPP 服务器以检索消息存档。

如何创建、发送和接收 XMPP IQ 数据包?

谢谢

PS:这个问题似乎与How Can I create,send and receive iq packets using smack(java) 重复,其实不然。近年来,Smack API 发生了很大变化。

【问题讨论】:

    标签: smack


    【解决方案1】:
         MyCustomIQ iq = new MyCustomIQ();
          iq.setType(IQ.Type.set);
         mConnection.sendIqWithResponseCallback(iq, new PacketListener() {
                    @Override
                    public void processPacket(Packet packet) throws SmackException.NotConnectedException {
                        Log.i("Send IQ with Response", "****** message " + packet);
                    }
                }, new ExceptionCallback() {
                    @Override
                    public void processException(Exception exception) {
                      exception.printStackTrace();
                        Log.i("IO archjieve Exception",""+ exception.getMessage());
                    }
                }, 5000);
    
          mConnection.sendPacket(new Presence(Presence.Type.available));
                PacketTypeFilter filter=new PacketTypeFilter(org.jivesoftware.smack.packet.Message.class);
                PacketListener myListener=new PacketListener(){
                    public void processPacket(Packet packet){
                       if(((Message) packet).getType().equals(Message.Type.chat))
                        {
                            ((Message) packet).getBody();
                        }
                        else if(((Message) packet).getType().equals(Message.Type.normal))
                        {
                            DefaultPacketExtension pacExten=PacketUtil.packetExtensionfromCollection(packet.getExtensions(), "result", "urn:xmpp:mam:0");
                            String strMsg=pacExten.getValue("body");
                        }
                    }
                }
                 ;
               mConnection.addPacketListener(myListener, filter);
    
    
        //My Custom IQ
        class MyCustomIQ extends IQ {
    
                String token;
    
    
                protected MyCustomIQ() {
                super("query","urn:xmpp:mam:0");
                }
    
    
    
                @Override
                protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
        //  String queryId = prefix + Long.toString(new AtomicLong().incrementAndGet());
                    xml.attribute("queryid",queryId);
                    xml.rightAngleBracket();
                    return xml;
                }
    
    
            }
    
    
    //You may get the response in PacketListerener sometimes so put debug that also
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2014-04-16
      • 1970-01-01
      • 2017-05-28
      • 2013-08-27
      • 2013-05-08
      相关资源
      最近更新 更多