【问题标题】:How can i listen incoming subscription request in smack openfire android我如何在 smack openfire android 中监听传入的订阅请求
【发布时间】:2016-10-23 18:01:13
【问题描述】:

我正在使用 smack open fire 创建一个 android 聊天应用程序。我面临的问题是我知道如何发送和接受订阅请求,但我怎么知道我是否收到了任何订阅请求。 我使用了 Stanza 监听器,但监听器只监听传入的聊天消息,而不是订阅请求。 下面是我的代码

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

我是 smack 的初学者,请帮助我如何收听传入的订阅请求。提前致谢。

【问题讨论】:

  • 何时向该用户发送订阅请求?这个“Stanz listner”不会打印在日志中?
  • StanzaTypeFilter 将实现一个函数 'accept' 你返回了什么?
  • 我只是使用这个模块来收听传入的订阅..我错了吗?如果我错了,你能告诉我我应该在那里写什么而不是节过滤器..提前谢谢
  • 这应该可以。只需删除 packetCollector 行,我猜你的代码中不需要这个。

标签: android xmpp openfire smack


【解决方案1】:

订阅请求不是Message。它是Presence

所以,你可能应该试试:

StanzaFilter filter = new StanzaTypeFilter(Presence.class);

参考:RFC 3921 - Section 6 - Managing Subscriptions

【讨论】:

    【解决方案2】:

    这就是我在我的android代码中所做的

    StanzaFilter subscribefilter = PresenceTypeFilter.SUBSCRIBE;
    PresenceSubscribeListener subscribeListener = new PresenceSubscribeListener(context.getApplicationContext(), connection);
    connection.addSyncStanzaListener(subscribeListener, subscribefilter);
    

    然后这个连接对象已经在 Android 中一个长期运行的服务中被引用。这样做是为了当您的应用在后台接收数据包时,您仍然可以处理传入的在线状态数据包。

    附:我在我的 android 代码中使用 smack 4.1.9。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多