在我的聊天应用程序中,当用户登录时,我想获得离线消息(如果有人向他发送了消息)。当用户处于在线状态时,我会收到通知,并且在用户登录后无法获得消息。我还检查了XMPP日志猫。我能够在那里阅读离线消息,但我无法通知用户他/她的ofline mesages。
这是我在服务onStart中使用的侦听器(服务立即在用户登录上启动)
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
final PacketCollector collector = connection.createPacketCollector(filter);
connection.addPacketListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
// TODO Auto-generated method stub
//notification(packet.getFrom());
packet = collector.nextResult();
Message message = (Message)packet;
senderName = packet.getFrom();
int alphaPOS = senderName.indexOf("@");
String subSenderName = senderName.substring(0,alphaPOS);
if(UserChatActivity.checkPresence==false){
notificationforChat(subSenderName+": "+message.getBody(),packet.getFrom().toString());
}
}
}, filter);
}
当用户在线时,这正常工作。但是我希望一旦用户登录他的消息,他的消息应通知他
谢谢
您必须确保XMPP服务器支持XEP 0136,XMPP的消息归档扩展。
同样的扩展名将解释如何检索存档的消息。
对于Ejabberd,您可以为此安装和配置MOD_ARCHIVE扩展名。它将将消息保存到SQL后端。
将过滤器更改为类型消息的过滤消息。
PacketFilter filter = new PacketTypeFilter(Message.class);
看看你的行为。
实际上阅读了您的问题;您是说可以在logcat中看到离线消息,但在屏幕上未收到?您在哪里记录收到的消息?