2014-06-25 43 views
0

我對我的聊天應用程序的最後一步接收發送郵件的傳遞,我試圖每當郵件傳遞到接收通知,所以我發現這個實現:在aSmack

MessageEventRequestListener 

它帶有4所覆蓋:

@Override 
public void deliveredNotificationRequested(String from, String packetID, 
    MessageEventManager messageEventManager) { 
System.out.println("delievered"); 

} 


@Override 
public void displayedNotificationRequested(String from, String packetID, 
    MessageEventManager messageEventManager) { 
System.out.println("displaydelievered"); 

} 


@Override 
public void composingNotificationRequested(String from, String packetID, 
    MessageEventManager messageEventManager) { 
System.out.println("composingdelievered"); 

} 


@Override 
public void offlineNotificationRequested(String from, String packetID, 
    MessageEventManager messageEventManager) { 
System.out.println("offlinedelievered"); 

} 

但是,當一個消息發送時,什麼都沒有發生,我想知道我是否缺少任何東西?這是正確的方法嗎?感謝

回答

0

每次發送郵件時,您可能會發送通知請求搭配:

MessageEventManager.addNotificationsRequests(message, 
           true, true, true, true); 

0

使用此代碼,你在哪裏得到消息的包。 //檢查是否已交付。

3

正如@Flow所述,XEP-22:消息事件已棄用。您可以使用DeliveryReceiptManager。

監聽器調用時在接收器側

DeliveryReceiptManager.getInstanceFor(connection).addReceiptReceivedListener(new ReceiptReceivedListener() 
    { 
@Override 
     public void onReceiptReceived(String arg0, String arg1, String arg2) { 
      Log.i("Message Delivered To=", arg0 + ", From = " + arg1 + " , ID= " + arg2); 
     } 
    }); 
} 

接收在發送消息信息添加以下代碼

//add delivery receipt request 

    DeliveryReceiptManager.addDeliveryReceiptRequest(Message); 

在PacketListener添加以下代碼

Packet received = new Message(); 

received.addExtension(new DeliveryReceipt(packet.getPacketID())); 

received.setTo(packet.getFrom()); 

connection.sendPacket(received); 
1

首先添加這些到您的配置 -

DeliveryReceiptManager.setDefaultAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always); 
ProviderManager.addExtensionProvider(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider()); 
ProviderManager.addExtensionProvider(DeliveryReceiptRequest.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceiptRequest.Provider()); 

再經過XMPPTcpConnection建立添加these-

DeliveryReceiptManager deliveryReceiptManager = DeliveryReceiptManager.getInstanceFor(this.connection); 
deliveryReceiptManager.setAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always); 
deliveryReceiptManager.autoAddDeliveryReceiptRequests(); 

這將使送達回執的所有郵件。

SENT: 
<iq to='chat_host' id='o2huU-440' type='get'><query xmlns='http://jabber.org/protocol/disco#info'></query></iq> 

RECV: 
<iq from='chat_host'id='o2huU-440' to='userJID'type='result'><query xmlns='http://jabber.org/protocol/disco#info'> <feature var='urn:xmpp:receipts'/></query> 

對於自動接收模式下的所有消息將與收據請求分機發送。您將收到所有郵件的收貨收據。