Changing the Roster to use SUBSCRIPTION_MANUAL means that you must register a listener for presence packets. The listener will have to look for any presence requests that have the type Presence.Type.SUBSCRIBE.
Sample code:
// Listen for any presence packets.
PresencePacketListener myPresencePacketListener = new PresencePacketListener() {
public void processPacket(Packet packet) {
Presence presence = (Presence)packet;
String from = presence.getFrom();
String key = StringUtils.parseBareAddress(from);
if (presence.getType() == Presence.Type.SUBSCRIBE) {
// Custom logic
// Accept or Reject subscription requests.
}
}
};
PacketFilter presenceFilter = new PacketTypeFilter(Presence.class);
connection.addPacketListener(myPresencePacketListener, presenceFilter);
RosterListener only listens for presence updates for people in your roster. Basically, it’'s there to allow you to easily monitor people already in your roster. A PresenceListener can listen for all presence packets, including subscribe packets.
I made a copy&paste mistake. I meant PacketListener instead of PresencePacketListener.
Differences:
A PacketListener must be added to an XMPPConnection while a RosterListener must be added to a Roster.
A PacketListener listens for all the packets received by an XMPPConnection or specified by a PacketFilter while a RosterListener listens for RosterPackets.
Since you are interested in Presence packets you should use a PacketListener instead of a RosterListener.