【问题标题】:Android with Asmack - How do I fetch current presence information when I connect to XMPP?Android with Asmack - 当我连接到 XMPP 时如何获取当前状态信息?
【发布时间】:2014-03-11 12:22:17
【问题描述】:

我有一个基于 asmack 的客户端,我连接并进行身份验证,然后我获取一个名册,我将一个侦听器附加到该名册并设置自己可用。

在我连接后,侦听器正确地接收到对状态所做的任何更改,但是我找不到获取我名单上所有条目当前状态的方法。

我尝试发送Presence.Type.subscribe 数据包,我尝试使用Roster#reload() 并且我尝试了以下方法:

for (RosterEntry entry : mRoster.getEntries()) {
   Presence presence = mRoster.getPresence( entry.getUser() );
   ...
}

(如果我在上面记录存在对象,它们都显示为“不可用”)

当我从Roster#reload 获得回调时,我还尝试在entriesUpdated 内尝试mRoster.getPresence(handle),并且在循环遍历Roster#getEntries 时分别尝试,我得到了有效的用户ID,但存在模式为null,并且类型对于每个人都不可用进入

有没有办法提示服务器向我发送当前的远程信息?

【问题讨论】:

    标签: android xmpp smack asmack


    【解决方案1】:

    怎么样

    Roster.getEntries()
    

    ?

    【讨论】:

    • 我遍历了它们并执行了 getPresence 并遇到了我上面在“另一个注释”下提到的相同问题,你知道为什么吗?
    • 哪里有问题?我只看到一条似乎与 Smack 的花名册无关的日志行。
    • 这条线确实看起来不相关,我认为这是我正在做的其他事情的副作用。问题是,我正在执行上面代码块中显示的操作,但存在对象的模式为 null,每个条目的类型都不可用
    • 我弄明白了,配置错误,感谢您的帮助
    • @Flow :请指导我完成这个问题:stackoverflow.com/questions/22372589/…
    【解决方案2】:

    我已经解决了这个问题,我在设置配置时遵循的部分示例似乎不正确。

    在您的ConnectionConfiguration 中包含以下设置将导致问题:

    config.setSendPresence(false);
    

    删除此内容后,初始状态已正确更新

    【讨论】:

    • 示例出自哪里?
    • 我看了一些,但我相信它来自 Yaxim yaxim.org 的源代码而不是官方文档。如果您不介意回答 - 有没有办法获得这些初始更新并且最初不发送存在,因为我不想显示可用然后返回到我保存的任何状态,我只想发送保存的状态
    • 我认为它应该/必须是可能的,但我无法告诉你确切的程序。
    • 无论如何,谢谢,我尝试在连接后手动发送数据包 - 这足以触发我们接收其他新更新但不会获得初始状态
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2014-12-27
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多