我正在使用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);
答案 0 :(得分:1)
我跟踪了代码,发现此版本中AbstractJidTypeFilter.class
存在错误。
将您的版本从Smack 4.2.0更改为Smack 4.2.2应该可行。
希望它能解决你的问题。
答案 1 :(得分:0)
我正在调试smack的源代码。您可以尝试以下方法:
将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>
在发送消息之前设置消息类型
connection.setFromMode(XMPPConnection.FromMode.USER);
说明:
message.setType(org.jivesoftware.smack.packet.Message.Type.chat);
检查来自AbstractJidTypeFilter
的消息是完整还是裸露。连接将设置from jid
节,默认为jid
。 (null
,第666行)
AbstractXMPPConnection.java#sendStanza
会检查邮件的类型是聊天还是正常。