有一个 openfire 服务器和 Android 客户端(smack)。所有客户端都可以互相添加到好友/名册列表(未经授权,我希望用户可以看到对方而不接受好友请求)。我在获取好友请求发送者的状态信息时遇到了一些问题。
假设有 2 个用户 - 用户 A,用户 B。
我可以通过以下方式将用户 B 添加到用户 A 的名册:
Roster roster = xmppManager.connection.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.accept_all);
roster.createEntry("userB", "userB@abc.com", null);
我可以在用户 A 的名册列表中看到用户 B。到目前为止一切都很好
用户 B 的问题很少。我在下面的代码中说明了问题所在:
//I have set the available and status of User A by:
//xmppManager.setStatus(available, bundle.getString("new_status"));
...
// That's how I get Roster and Presence of user A
Roster roster = connection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
Presence presence = roster.getPresence(entry.getUser());
// User A always not available even I set User A to available
Log.e(TAG, "presence.isAvailable() = " + presence.isAvailable());
// User A's status always empty
Log.e(TAG, "presence.getStatus() = " + presence.getStatus());
// User A's getName() always null
if (entry.getName() != null)
{
name = entry.getName();
}
else
Log.e(TAG, "GetName is null");
}
我需要在用户 A 处创建条目()吗?
还是我需要像这样处理好友请求?
@Override
public void entriesAdded(Collection<String> collection) {
String user = "";
Iterator<String> it = collection.iterator();
if(it.hasNext()){
user=it.next();
}
Presence presence = new Presence(Presence.Type.subscribe);
presence.setTo(user);
connection.sendPacket(presence);
}
但它不起作用。看来我需要先对用户 B 做点什么。欢迎任何想法,谢谢!