【问题标题】:Echoing message in XMPP with Asmack使用 Asmack 在 XMPP 中回显消息
【发布时间】:2014-02-21 07:47:23
【问题描述】:

正如asmack documentation 中所见,当您在 processMessage() 方法中从 Chat 的 MessageListener 收到一条 Chat 类型消息时,我应该使用 Chat.sendMessage() 发回这条消息以通知消息接收。

但在我的聊天实现中,我在打开一对一聊天时不使用 ChatManager,我有一个服务和侦听器来做这些事情。

在服务中,我有一个 PacketListener 要接收,我正在尝试正确地发送回消息,正​​如我在 asmack documentation 中看到的那样,但它不起作用。

this.xmppChat.addPacketListener(new PacketListener() {

            @Override
            public synchronized void processPacket(Packet packet) {

                Message message = (Message) packet;

                if (message.getType() == Message.Type.chat) {

                    Log.i("XMPP_SERVICE",
                            String.format("Mensaje recibido de %s",
                                    message.getFrom()));

                    // Rest of code implementation...

                    // At the end try to send back message to notify reception.
                    XMPPService.this.xmppChat.sendMessage(new Message(message.getBody()));
                }
            }
        }, new PacketTypeFilter(Message.class));

XMPPService.this.xmppChat.sendMessage(Message message) 方法:

public boolean sendMessage(Message message) {

    Log.i("XMPP_INFO", "Enviando el mensaje");

    try {

        this.xmppManager.getConnection().sendPacket(message);

        Log.i("XMPP_INFO", "Enviado el mensaje");
        return true;
    } catch (Exception ex) {

        Log.e("XMPP_ERROR", ex.getMessage());
        return false;
    }
}

我做错了什么?我该如何解决?

最好的问候,并在此先感谢您。

【问题讨论】:

  • 什么不起作用?一些细节会有所帮助。

标签: android message asmack


【解决方案1】:

这是我的代码,希望对你有所帮助,看看吧:

ChatManager cm = XmppTool.getConnection().getChatManager();


final Chat newchat = cm.createChat(userChat, new MessageListener() {

            @Override
            public void processMessage(Chat chat, Message message) {
                // TODO Auto-generated method stub
                Log.i(TAG,
                        "from:" + message.getFrom() + " body:"
                                + message.getBody());
                String[] args = new String[] { "hoafer", message.getBody(),
                        TimeRender.getDate(), "IN" };
            }
        });

如果您想收听所有消息,可以使用该代码:

cm.addChatListener(new ChatManagerListener() {
        @Override
        public void chatCreated(Chat chat, boolean able) {
            chat.addMessageListener(new MessageListener() {
                @Override
                public void processMessage(Chat chat, Message message) {
                    Log.i(TAG, "receiver message~!");
                    String tmp = message.getFrom();
                    String body=message.getBody();
                    String[] from = tmp.split("@");
                    Log.i(TAG, "from:" + message.getFrom() + " body:"
                            + body);
                    }

            });
        }
    });

建议你使用最新版本的库,老版本好像有问题。我也遇到过类似的问题,用新版本库解决了

【讨论】:

  • 能否给我们新的链接:)
  • @hoafer 我在 android 设备上使用 asmack 从 xmpp 服务器发送和接收消息时遇到问题,你能过来这个link 帮助我吗,谢谢
【解决方案2】:

试试这个代码可能对你有帮助:

PacketFilter packetFilter = new MessageTypeFilter(
                        Message.Type.chat);

                connection.addPacketListener(new PacketListener() {
                    @Override
                    public void processPacket(Packet packet)
                            throws NotConnectedException {
                        Message message = (Message) packet;

                        if (message.getBody() != null) {
                            String fromName = StringUtils
                                    .parseBareAddress(message.getFrom());
                            Log.e("XMPPChatDemoActivity", "Text Recieved "
                                    + message.getBody() + " from "
                                    + fromName);

                            Packet received = new Message();
                            received.addExtension(new DeliveryReceipt(
                                    packet.getPacketID()));
                            received.setTo(packet.getFrom());
                            connection.sendPacket(received);


                        }

                    }
                }, packetFilter);

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2015-02-18
    • 2012-09-10
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多