Could someone please help me out on how to manually recieve subscriptions? I am having some problems with it. Please, help me out with what you would do when both recieving a subscription from someone else and adding a contact. thanks.
Ok,
First, at the beginnig of your code (before you connect to the server):
Roster.setDefaultSubscriptionMode(Roster.SUBSCRIPTION_MANUAL);
You need to have a packet listen class like this:
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.util.StringUtils; /** Shows a SubscriptionRequestDialog when a subscript request Presence packet is recieved.
* Shows an infomation pane when a subscribed packet is recieved*/
public final class SubscriptionRequestPacketListener implements PacketListener{
public void processPacket(Packet packet) {
Presence p;
try{
p=(Presence) packet;
}
catch (ClassCastException cce){
return;
}
if(p.getType()==Presence.Type.SUBSCRIBE){
// show a subscription request dialog
// snip
return;
}
if(p.getType()==Presence.Type.SUBSCRIBED){
// Tell the user someone has subscribed them and they can see that persons presence.
// snip
return;
}
if(p.getType()==Presence.Type.UNSUBSCRIBE){
Presence np=new Presence(Presence.Type.UNSUBSCRIBED);
np.setTo(p.getFrom());
np.setFrom(Conn.getUser());
Conn.sendPacket(np);
}
}
}
You need to add this listener to the XMPPconnection before logging in:
Conn.addPacketListener(new SubscriptionRequestPacketListener(), new PacketTypeFilter(Presence.class));
Conn.login("username","password");
When the user wants to allow someone to see their presence, send this:
// accept the subscription request
Presence p=new Presence(Presence.Type.SUBSCRIBED);
try{
p.setFrom(Conn.getUser());
p.setTo(From); // the jabber id of the user requesting presence subscription
Conn.sendPacket(p);
}
catch(Exception e){
//show error msg to user
}
HTH,
Pheet
1 Like