我正在使用smack api开发android中的聊天应用程序。我正面临着让朋友请求处于脱机状态的问题。我收到了使用以下代码收到的好友请求。
LoginScreen.connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
final Presence newPresence = (Presence) packet;
final Presence.Type presenceType = newPresence.getType();
final String fromId = newPresence.getFrom();
final String toId = newPresence.getTo();
final RosterEntry newEntry = roster.getEntry(fromId);
final String name = fromId.substring(0, fromId.indexOf("@"));
if (presenceType == Presence.Type.subscribed) {
Log.i("test-chat", "#####SUBSCRIBED#########");
}
if (presenceType == Presence.Type.subscribe) {
//adding buddy request to local DB
}
}
}, new PacketFilter() {
public boolean accept(Packet packet) {
if (packet instanceof Presence) {
Presence presence = (Presence) packet;
if (presence.getType().equals(Presence.Type.subscribed)
|| presence.getType().equals(Presence.Type.subscribe)
|| presence.getType().equals(Presence.Type.unsubscribed)
|| presence.getType().equals(Presence.Type.unsubscribe)
|| presence.getType().equals(Presence.Type.available)
|| presence.getType().equals(Presence.Type.unavailable)) {
return true;
}
}
return false;
}
});
当用户在线时,此功能正常。但是假设当用户离线时,另一个用户向该用户发出好友请求。当用户上线时,我无法获得好友请求,因为收听者没有被调用。需要调用侦听器,以获取在脱机状态期间获得的所有伙伴请求。
请帮忙。
答案 0 :(得分:1)
你的代码很好。这也发生在我身上。那么实际的问题是你在收到请求后正在注册监听器。
尝试在登录用户之前注册监听器,即使离线也会看到收到请求。
这实际上解决了这个问题。试试这个,如果你还有任何问题......请详细说明你的情况。
希望这有帮助。