Я пишу чат-приложение для Android.
Я использую функцию общих сообщений о состоянии Google Talk. http://code.google.com/apis/talk/jep_extensions/shared_status.html
Я должен отправить эту строфу
<iq type='get' to='gmail.com'> <query xmlns='http://jabber.org/protocol/disco#info'/> </iq>
Мой код (с использованием SMACK API):
final IQ iq = new IQ() { public String getChildElementXML() { return "<query xmlns='http://jabber.org/protocol/disco#info'/>"; } }; iq.setTo("gmail.com"); iq.setType(IQ.Type.GET); Log.w("IQ", "Prepared packet " + iq.toXML()); Log.w("IQ", "Sending 1"); connection.sendPacket(iq);
Я ожидаю получить следующий пакет:
<iq xmlns='jabber:client' from='gmail.com' type='result'> <query xmlns='http://jabber.org/protocol/disco#info'> <identity category='server' type='im' name='Google Talk'/> <feature var='http://jabber.org/protocol/disco#info'/> <feature var='google:jingleinfo'/> <feature var='google:roster'/> <feature var='google:nosave'/> <feature var='google:setting'/> <feature var='google:shared-status'/> <feature var='http://jabber.org/protocol/archive#otr'/> <feature var='google:mail:notify'/> <feature var='http://jabber.org/protocol/archive#save'/> <feature var='http://jabber.org/protocol/rosterx'/> </query> </iq>
Мой слушатель получает пакет:
public void processPacket(Packet //IQ iq = (IQ) packet; Log.w("IQ", "Packet received " + packet.toXML()); }
При получении я получаю следующий журнал:
03-17 08:05:43.129: W/IQ(1050): Packet received <iq id="fYhYL-4" to="abdurrahim.ceg@gmail.com/androidC2AEBEEF" from="gmail.com" type="result"></iq>
Что я делаю не так?
Заранее спасибо!
Не было проблем с отправкой пакетов.Я должен написать IQProvider или PacketExtensionProvider для анализа входящих пакетов, так как smack не понимает эти пользовательские пакеты.