在离线状态下使用smack android获取好友请求的问题

时间:2014-06-02 10:10:56

标签: android smack

我正在使用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;
  }
});

当用户在线时,此功能正常。但是假设当用户离线时,另一个用户向该用户发出好友请求。当用户上线时,我无法获得好友请求,因为收听者没有被调用。需要调用侦听器,以获取在脱机状态期间获得的所有伙伴请求。

请帮忙。

1 个答案:

答案 0 :(得分:1)

你的代码很好。这也发生在我身上。那么实际的问题是你在收到请求后正在注册监听器。

尝试在登录用户之前注册监听器,即使离线也会看到收到请求。

这实际上解决了这个问题。试试这个,如果你还有任何问题......请详细说明你的情况。

希望这有帮助。