2012-04-02 72 views
0

我正在使用smack API来接受或拒绝发送给用户的联系请求。 在我呈现客户端之前(我的产品有一个通知系统,并且当他/她被添加到某人的名单中时向用户创建通知)之前,我想知道订阅请求的状态。这样我就可以显示接受/拒绝按钮供用户采取行动,并且如果已经发生的行为会呈现“您已​​经接受/拒绝”类型的消息。如何查找联系请求在XMPP中被接受或拒绝?

据我所知,如果用户A收到来自B的请求,并且A接受请求,则名册条目的订阅状态变为FROM或BOTH。 但是我怎样才能弄清楚我是否拒绝了某个用户的订阅请求?

回答

0

要侦听用户是否拒绝了您的添加好友请求。您需要注册PacketListener并过滤Presence类的数据包。在其中,您将获得一个拒绝该请求的用户退订类型的存在数据包。

public class RequestListener implements PacketListener { 
    @Override 
    public void processPacket(Packet pack) { 
     Presence pres = (Presence) pack; 
     if (pres.getType() != null && 
        pres.getType().equals(Presence.Type.unsubscribed)) { 
      // user with jid pres.getFrom() rejected your request. 
     } 
    } 
} 

// somewhere in code to register the request listener after login 
connection.addPacketListener(new RequestListener(), 
     new PacketTypeFilter(Presence.class));