Android with Asmack - 当我连接到 XMPP 时如何获取当前状态信息?

Posted

技术标签:

【中文标题】Android with Asmack - 当我连接到 XMPP 时如何获取当前状态信息?【英文标题】:Android with Asmack - How do I fetch current presence information when I connect to 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,并且类型对于每个人都不可用进入

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

【问题讨论】:

【参考方案1】:

怎么样

Roster.getEntries()

?

【讨论】:

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

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

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

config.setSendPresence(false);

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

【讨论】:

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

以上是关于Android with Asmack - 当我连接到 XMPP 时如何获取当前状态信息?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Android 上使用 asmack 登录 Facebook

如何在 Android aSmack 中实现 DeliveryReceiptManager

当我连接到我的 Wifi 时,在 Android 上没有收到推送通知

无法注册新用户 android asmack “无法生成验证码”

asmack android,无法传输文件

用于 Facebook 聊天的 Asmack 不适用于 PrivacyListManager