atul1
July 15, 2009, 6:36pm
1
Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
after setting this…when someone send me any request , i can only accept it automatically
but how do i come to know who has send me request ???
how to register a listener for presence packet…??
**like when some listener changes its Status(eg from available to busy) then **
**public void presenceChanged(Presence presence) { **
}
this methord is evoked automatically…
can u plzz exaplin with snippet code
similary how can i find the presence of one who had sent me request…plzzz help
thanks in advance
Dan_Le
July 15, 2009, 11:04pm
2
If you want to handle subscription requests manually, you can register a packet listener to your XMPPConnection
public class PresenceListener implements PacketListener { public void processPacket(Packet packet) {
Presence presence = (Presence) packet;
Presence response = null; switch (presence.getType()) {
case subscribe:
// E.g., Accept the subscribe request
response = new Presence(Presence.Type.subscribed);
response.setTo(presence.getFrom());
xmpp.sendPacket(response);
break;
case unsubscribe:
//...
break;
case available:
//... break; case unavailable:
/...
break;
}
}
} PacketFilter filter = new PacketTypeFilter(Presence.class);
xmpp.addPacketListener(new PresenceListener(), filter);
and just implement logic when you get a subscribe presence message for example. For presence changes you need to register a RosterListener in a similar way (see http://www.igniterealtime.org/builds/smack/docs/latest/documentation/roster.html ).
To find the presence of someone who has just subcribed to you, you need to subscribe to them first, by sending a subscribe presence packet to them. Then you can just check the presence via your roster: xmpp.getRoster().getPresence("somejid@domain.com ");
HTH
Dan