連絡先によるVCardの更新を聞くのに苦労しています。VCardの更新中にカスタム情報を保持するカスタムプレゼンスを送信してこれを実行しようとしています。デバッグの出力から、そのようなカスタムプレゼンスが送信されるたびに、連絡先がプレゼンススタンザを受信することがわかりました。残念ながら、連絡先のpacketListenerが着信パケットを検出できず、接続に追加されたすべてのリスナーが削除されたように見える場合、つまり、以前に検出できた他のパケットは、デバッグは引き続き正常に機能しますが、リッスンできません。私のコードスニペットのいくつかは、次のようになっています。
// to update VCard
mVCard.load(mXMPPConnection);
mVCard.setField(XmppUserInfo.tagHeadIcon, userInfo.getHeadIconUrl());
mVCard.setField(XmppUserInfo.tagGender, userInfo.getGender());
mVCard.setField(XmppUserInfo.tagNickname,userInfo.getNickname());
mVCard.setField(XmppUserInfo.tagAccount, userInfo.getAccount());
mVCard.setField(XmppUserInfo.tagSignnature, userInfo.getSignnature());
mVCard.save(mXMPPConnection);
// to send custom presence to subscribers to renew infomation
Presence presence = new Presence(Type.available);
presence.addExtension(new UserInfoExtension(userInfo));
mXMPPConnection.sendPacket(presence);
そして私のリスナーはこのようなものです:
//add Listener
PacketListener packetListener = new PacketListener() {
@Override
public void processPacket(Packet packet) {
if(null != packet){
Log.i(TAG,"UserInfo is being updated" );
Log.i(TAG, "the packet is " +packet.toXML());
}
}
}
};
xmppConnection.addPacketListener(packetListener, new PacketFilter() {
@Override
public boolean accept(Packet p) {
return true;
}
});
しかし、デバッグの出力からプレゼンスを受け取ることはできますが、ログでprescenスタンザを言うことはできません。どんな体も私を助けることができますか?どうもありがとう。
受信したプレゼンスは次のようになります。
<presence id="AL4As-4" from="20298509@openfire/ad9a8862" to="20298468@openfire">
<user xmlns="kascend:video:xmpp:userinfo">
<info account="133787245" gender="f" signnature="wwwwwww" nickname="bbbb"/>
</user>
<c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.igniterealtime.org/projects/smack/" ver="O1jiM4C3yPnCFLp9hBZUn4AgVXs="/></presence>