android - 如何在 Smack 中启用 XEP-0199?

标签 android xmpp ping smack asmack

我正在使用 aSmack。我的应用程序监听聊天室并对消息使用react,但它从不发送消息。如果聊天室保持沉默一段时间然后发送新消息,则该应用程序不会收到更多消息。我研究过,我认为 XEP-0199是这里的解决方案。我看到@Flow(当前的 Smack 维护者)implemented itthe issue related已关闭。

我认为我需要使用 PingProvider但我真的不知道如何将此类与 Connection 连接起来。

如何启用 XEP-0199 ?如何使用 PingProvider


连接代码:

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);

最佳答案

我解决了手动执行 ping 响应的问题:

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;
    }
});

关于android - 如何在 Smack 中启用 XEP-0199?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23952347/

相关文章:

javascript - JXCore Cordova => native Cordova 插件(无法访问 cordova.exec(...))

android - 在我的 Android 手机上开发会不会出问题?

android - XMPP asmack 问题缺少属性

android - 实现网络类(class)的最佳选择

java - 从 java-smack 客户端连接到 Openfire 时发生 SSL 错误

android - 连接到 ros master

windows - 如何在 Windows 上只获取 ping 测试的回复行

java - 设置ImageView相对于文本高度的宽度和高度

javascript - 如何在 Cordova 中将图像 (.png) 绘制到 Canvas 上?

c# - 使用Ping映射事件IP的线程问题-C#