【发布时间】: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
我需要将 IQ 数据包发送到 XMPP 服务器以检索消息存档。
如何创建、发送和接收 XMPP IQ 数据包?
谢谢
PS:这个问题似乎与How Can I create,send and receive iq packets using smack(java) 重复,其实不然。近年来,Smack API 发生了很大变化。
【问题讨论】:
标签: smack
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
【讨论】: