How to enable the XEP-0199 in Smack?

android, asmack, ping, smack, xmpp

Solution

I fix the problem implementing the ping response manually:

connection.addPacketListener(new PacketListener() {

    @Override
    public void processPacket(Packet packet) {
        connection.sendPacket(new Pong((Ping) packet));
    }
}, new PacketFilter() {

    @Override
    public boolean accept(Packet packet) {
        return packet instanceof Ping;
    }
});

Problem

I'm using aSmack. My app listens a chatroom and reacts to the messages but it never send a message. The app doesn't receive more messages if the chatroom remains in silence for a while and then a new message is sent. I researched and I think that XEP-0199 is the solution here. I see that @Flow (the current Smack maintainer) implemented it and the issue related was closed. I think that I need to use `PingProvider` but I really don't know how to connect this class with the `Connection`. How can I enable the XEP-0199? How can I use `PingProvider`? Connection code: ``` smack = SmackAndroid.init(getActivity().getApplicationContext()); connection = new XMPPConnection(App.getServer()); connection.addConnectionListener(new ConnectionListener() { private final static String SMACK = "SMACK"; @Override public void reconnectionSuccessful() { Log.i(SMACK , "reconnectionSuccessful"); } @Override public void reconnectionFailed(Exception e) { Log.i(SMACK, "reconnectionFailed", e); } @Override public void reconnectingIn(int seconds) { Log.i(SMACK, "reconnectingIn " + seconds); } @Override public void connectionClosedOnError(Exception e) { Log.i(SMACK, "connectionClosedOnError", e); } @Override public void connectionClosed() { Log.i(SMACK, "connectionClosed"); } }); connection.connect(); connection.login(user, password); ```

Original source