I am creating an android chat application using smack openfire.The problem that i am facing is i know how to send and accept subscription request but how can i know if i have received any subscription request. I have used Stanza listener but the listner is only listening to incoming chat messages not subscription request. Below is my code
StanzaFilter filter=new StanzaTypeFilter(Message.class);
PacketCollector collector=connection.createPacketCollector(filter);
connection.addAsyncStanzaListener(new StanzaListener() {
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
Log.wtf("MA","Stanz listner");
}
},filter);
I am a beginner in smack,please help me how can i listen for incoming subscription request.Thanks in advance..
A subscription request is not a Message
. It is a Presence
instead.
So, you probably should try:
StanzaFilter filter = new StanzaTypeFilter(Presence.class);
This is how I have done in my android code
StanzaFilter subscribefilter = PresenceTypeFilter.SUBSCRIBE;
PresenceSubscribeListener subscribeListener = new PresenceSubscribeListener(context.getApplicationContext(), connection);
connection.addSyncStanzaListener(subscribeListener, subscribefilter);
And then this connection object has been referenced in a long running service in Android. This has been done such that when a packet is received when you app is in background, you can still process the incoming presence packet.
P.S. I am using smack 4.1.9 in my android code.
来源:https://stackoverflow.com/questions/40206137/how-can-i-listen-incoming-subscription-request-in-smack-openfire-android