Smack 4.2.0 OutgoingChatMessageListener没有接到任何电话

时间:2017-09-18 06:00:22

标签: android android-fragments xmpp smack android-listfragment

我正在使用smack 4.2.0最新版本,这里IncomingChatMessageListener工作正常但我发送邮件时没有调用OutgoingChatMessageListener。任何人都可以向我提出这个问题吗? 我的代码在

之下
ChatManager chatManager = ChatManager.getInstanceFor(mXMPPConn);
EntityBareJid jid = JidCreate.entityBareFrom(mStrJabberID);
Chat chat = chatManager.chatWith(jid);
chatManager.addOutgoingListener(new OutgoingChatMessageListener() {
   @Override
   public void newOutgoingMessage(EntityBareJid to, Message message, Chat chat) 
   {
      System.out.format("OUTGOING: %s.\n", message);
   }
});

chat.send(strMsg);

2 个答案:

答案 0 :(得分:1)

我跟踪了代码,发现此版本中AbstractJidTypeFilter.class存在错误。

将您的版本从Smack 4.2.0更改为Smack 4.2.2应该可行。
希望它能解决你的问题。

答案 1 :(得分:0)

我正在调试smack的源代码。您可以尝试以下方法:

  1. 将FromMode.USER设置为连接

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.mohamed.myawesomeapplication.MainActivity">
    
        <EditText
            android:id="@+id/emailReg"
            android:layout_width="368dp"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp"
            android:hint="Enter your email"
            android:inputType="textEmailAddress"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            />
    
        <EditText
            android:id="@+id/pssReg"
            android:layout_width="368dp"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginTop="8dp"
            android:hint="Enter your password"
            android:inputType="textPassword"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/emailReg"/>
    
        <Button
            android:id="@+id/regReg"
            android:layout_width="353dp"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:text="Register"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.533"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/pssReg"/>
    
        <TextView
            android:id="@+id/signinReg"
            android:layout_width="368dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:text="Already Registered? sign in"
            android:textAlignment="center"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/regReg"
            tools:ignore="MissingConstraints"/>
    </android.support.constraint.ConstraintLayout>
    
  2. 在发送消息之前设置消息类型

    connection.setFromMode(XMPPConnection.FromMode.USER);
    
  3. 说明:

    1. message.setType(org.jivesoftware.smack.packet.Message.Type.chat); 检查来自AbstractJidTypeFilter的消息是完整还是裸露。连接将设置from jid节,默认为jid。 (null,第666行)

    2. AbstractXMPPConnection.java#sendStanza会检查邮件的类型是聊天还是正常。