6

私は Android で XMPP に基づくチャット アプリに取り組んでいます。

1 対 1 のチャット機能を実行しましたが、マルチ ユーザー チャットで問題が発生しました。新しいチャット ルームの作成に成功しました。複数のユーザーがそのルームに参加できます。addPacketListenerグループチャット用のコードも書いていますPacketFilter filter = new MessageTypeFilter(Message.Type.groupchat);

ユーザーがグループでメッセージを送信したときに、そのリスナーでメッセージも受信しますが、どのユーザーがメッセージを送信したかを区別できません。

1 対 1 のチャット メッセージ パケットのようmessage.getFrom()に、送信者の JID を取得する機能があります。

マルチ ユーザー チャットの場合、同じ関数はグループ/ルームの JID を送信者として返します。

私はまた、送信中にメッセージのプロパティを設定しようとしましたmessage.setFrom(senderJID);またはmessage.setFrom(sendername@conference.hostname/Groupname);

それでも、senderJID またはそのニックネームを取得できません。

だから私の質問は: 送信者ユーザーの JID またはそのニックネームを取得する方法は? from message(packet) in messageListener

グループでメッセージを送信するためのコードは次のとおりです:-

String to = strGroupJID;
String text = etChatOnTextBox.getText().toString();
if(!text.equals(""))
{
        Message msg = new Message(to, Message.Type.groupchat);
        msg.setBody(text);
        String name1 = xmppConnection.getUser();
        name1 = name1.substring(0, name1.lastIndexOf("@"));
        name1 = name1 + "@conference.192.168.56.1";
       // name1 = name1 + "@conference.192.168.56.1/" + strGroupName ;
        msg.setFrom(name1);
        muc.sendMessage(msg);
 }

受信メッセージのコードは次のとおりです:-

PacketFilter filter = new MessageTypeFilter(Message.Type.groupchat);
        connection.addPacketListener(new PacketListener() {
            @Override
            public void processPacket(Packet packet) {
                Message message = (Message) packet;
                if (message.getBody() != null) {
                    String fromName = StringUtils.parseBareAddress(message
                            .getFrom());

                    Log.i("ChatOn", "Text Recieved " + message.getBody()
                            + " from " + fromName );
           }
        }
   });

任意のヘルプや提案をいただければ幸いです

4

2 に答える 2

3

コードのこの部分は、チャット ルームを識別します。

String fromName = StringUtils.parseBareAddress(message
        .getFrom());

このコードを使用して、チャット ルーム ユーザーのニックネームを識別できます。

String nick = StringUtils.parseResource(message
        .getFrom());

これは、マルチユーザー チャット メッセージの JID が のように見えroomname@server/nickname、ユーザーのニックネームが JID のリソースであるためです。

于 2014-08-14T13:03:39.030 に答える
0

送信者ユーザーの JID またはそのニックネームを取得するには? from message(packet) in messageListener

XEP-45 7.4 を見ると、from JID が MUC の裸の JID とリソースとしての MUC のメンバー ニックネームであることがわかります。したがって、ニックネームは from JID のリソースです。

部屋が非匿名の場合、拡張プレゼンス情報で占有者の完全な JID を取得できます ( XEP-45 7.2.4 ) 。

于 2014-08-14T12:28:24.370 に答える