2012-04-02 28 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));