Smack4.20チャット通信と傍受を実現(2)


前回はopenfrieに接続してログインする方法を大まかに説明しましたが、通信方法を理解し始めました.
ログインに成功すると、次のようなコードでユーザーとチャットすることができます.
 public ChatManager getChatManager() {
        if(chatManager == null){
            chatManager = ChatManager.getInstanceFor(connection);
        }
        return chatManager;
    }

まず、connectionでchatManager管理のチャットオブジェクトを取得し、次の手順に従います.
public void sendChatMessage(String receive, String body) throws Exception {
        //   jid
        EntityBareJid jid = JidCreate.entityBareFrom(receive);
        //    chat
        Chat chat = getChatManageWindows(jid);

        //      ,     Message.Type.chat 
        Message message = new Message(jid, Message.Type.chat);
        message.setBody(body);
        //    
        chat.send(message);
    }

注意、ここのパラメータreceiveはメッセージアカウントを受信するjidであり、ここでjidは各ユーザー特有のアカウントであり、openfireにログインすることで各アカウントのjidを表示することができ、jidは厳格なフォーマット要求があり、フォーマットは以下の通りである.
   @openfire     

JidCreateクラスでjidオブジェクトを作成できます.ここでbodyパラメータは送信された内容で、sparkクライアントでテストできるチャットメッセージを送信することができます.
チャットメッセージの傍受は、公式に提供されたI n c o m i n g ChatMessageListenerリスナーインタフェースを実装することによって、メッセージを傍受することができる.コードは以下の通りである.
import android.util.Log;
import org.jivesoftware.smack.chat2.Chat;
import org.jivesoftware.smack.chat2.IncomingChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jxmpp.jid.EntityBareJid;


/**
 *        
 * Created by ozy on 2017/4/11.
 */
public class InChatMessageListener implements IncomingChatMessageListener {

    @Override
    public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
        //from         jid,message        ,chat       
        //  from      ,   string  
        Log.d("text",from.toString());
        //    
        Log.d("text",message.getBody());
    }
}

Listenerバインドは次のとおりです.
InChatMessageListener inListener = new InChatMessageListener(this);
chatManager.addIncomingListener(inListener);

これにより、プロジェクトには他の多くの関係のないものが結合されているため、抽出するしかありません.次の節では、オフラインメッセージと親友の花の名簿を共有しましょう.