1. 程式人生 > 實用技巧 >Android基於XMPP Smack Openfire開發IM(5)傳送訊息

Android基於XMPP Smack Openfire開發IM(5)傳送訊息

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

這節到重點了,看看傳送訊息的實現,程式碼寫的很簡單,主要為了演示功能的實現,


廢話不說了。

在登陸以後應該建立一個監聽訊息的監聽器,用來監聽收到的訊息:

這裡收到訊息後,通過廣播將訊息傳送到需要的地方,比如聊天的activity,當然不一定用廣播,

[java]view plaincopy

  1. privateHandlerhandler=newHandler(){

  2. publicvoidhandleMessage(android.os.Messagem){

  3. Messagemsg=newMessage();

  4. msg=(Message)m.obj;

  5. //把從伺服器獲得的訊息通過廣播發送

  6. Intentintent=newIntent("org.yhn.mes");

  7. String[]message=newString[]{

  8. msg.getFrom(),

  9. msg.getBody()};

  10. intent.putExtra("message",message);

  11. MainActivity.this.sendBroadcast(intent);

  12. };

  13. };

  14. /**messagelistener*/

  15. classMyChatManagerListenerimplementsChatManagerListener{

  16. public

    voidchatCreated(Chatchat,booleanarg1){

  17. chat.addMessageListener(newMessageListener(){

  18. publicvoidprocessMessage(Chatarg0,Messagemsg){

  19. /**通過handler轉發訊息*/

  20. android.os.Messagem=handler.obtainMessage();

  21. m.obj=msg;

  22. m.sendToTarget();

  23. }

  24. });

  25. }


這樣就可以收到訊息了,可以再openfire伺服器端,給所有線上的使用者傳送一個訊息,測試下,這裡就不貼圖了,


smack中有chat和ChatManager類,可以方便的建立和管理會話,

比如在開啟一個好友的聊天視窗時,建立一個和該好友通訊的chat


[java]view plaincopy

  1. publicclassChatActivityextendsActivity{

  2. Stringaccount;

  3. StringchatNick;

  4. publicstaticStringchatContents;

  5. TextViewchatTextView;

  6. publicvoidonCreate(BundlesavedInstanceState){

  7. super.onCreate(savedInstanceState);

  8. requestWindowFeature(Window.FEATURE_NO_TITLE);

  9. setContentView(R.layout.activity_chat);

  10. /**設定top面板資訊*/

  11. chatNick=getIntent().getStringExtra("nick");

  12. account=getIntent().getStringExtra("account");

  13. TextViewnick_tv=(TextView)findViewById(R.id.chat_top_nick);

  14. nick_tv.setText(chatNick);

  15. Buttonsend_btn=(Button)findViewById(R.id.chat_btn_send);

  16. send_btn.setOnClickListener(newOnClickListener(){

  17. publicvoidonClick(Viewarg0){

  18. EditTextinput=(EditText)findViewById(R.id.chat_input);

  19. Stringcontent=input.getText().toString();

  20. try{

  21. ChatManagercm=ConnUtil.getConnection().getChatManager();

  22. Chatchat=cm.createChat(account,newMessageListener(){

  23. publicvoidprocessMessage(Chatarg0,Messagemsg){

  24. Log.i("---",msg.getFrom()+"說:"+msg.getBody());

  25. //新增訊息到聊天視窗

  26. }

  27. });

  28. Messagem=newMessage();

  29. m.setBody(content);

  30. chat.sendMessage(m);

  31. }catch(XMPPExceptione){

  32. e.printStackTrace();

  33. }

  34. }

  35. });

  36. }

  37. }


在上邊的程式碼中通過

[java]view plaincopy

  1. Messagem=newMessage();

  2. m.setBody(content);

  3. chat.sendMessage(m);

傳送訊息,

有了chat做什麼都方便啦

測試可以用spark,

下面看效果圖:




PS:圖片顯示不完整可在新視窗中檢視,或者調整部落格配置,嘿嘿。


轉載於:https://my.oschina.net/bv10000/blog/187569