Android基于XMPP Smack Openfire开发IM(5)发送消息

废话不说了。

在登陆以后应该建立一个监听消息的监听器,用来监听收到的消息:

这里收到消息后,通过广播将消息发送到需要的地方,比如聊天的activity,当然不一定用广播,

[java]  view plain copy
  1. private Handler handler = new Handler(){  
  2.         public void handleMessage(android.os.Message m) {  
  3.             Message msg=new Message();  
  4.             msg=(Message) m.obj;  
  5.             //把从服务器获得的消息通过广播发送  
  6.             Intent intent = new Intent("org.yhn.mes");  
  7.             String[] message=new String[]{  
  8.                     msg.getFrom(),  
  9.                     msg.getBody()};  
  10.             intent.putExtra("message", message);  
  11.             MainActivity.this.sendBroadcast(intent);  
  12.         };  
  13.     };  
  14.       
  15.     /** message listener*/  
  16.     class MyChatManagerListener implements ChatManagerListener {  
  17.         public void chatCreated(Chat chat, boolean arg1) {  
  18.             chat.addMessageListener(new MessageListener(){  
  19.                 public void processMessage(Chat arg0, Message msg) {  
  20.                     /**通过handler转发消息*/  
  21.                     android.os.Message m=handler.obtainMessage();  
  22.                     m.obj=msg;  
  23.                     m.sendToTarget();  
  24.                 }  
  25.             });  
  26.         }  

这样就可以收到消息了,可以再openfire服务器端,给所有在线的用户发送一个消息,测试下,这里就不贴图了,


smack中有chat和ChatManager类,可以方便的创建和管理会话,

比如在打开一个好友的聊天窗口时,创建一个和该好友通信的chat


[java]  view plain copy
  1. public class ChatActivity extends Activity {  
  2.     String account;  
  3.     String chatNick;  
  4.     public static String chatContents;  
  5.     TextView chatTextView;  
  6.       
  7.      public void onCreate(Bundle savedInstanceState) {  
  8.             super.onCreate(savedInstanceState);  
  9.             requestWindowFeature(Window.FEATURE_NO_TITLE);  
  10.             setContentView(R.layout.activity_chat);  
  11.             /** 设置top面板信息*/  
  12.             chatNick=getIntent().getStringExtra("nick");  
  13.             account=getIntent().getStringExtra("account");  
  14.             TextView nick_tv=(TextView) findViewById(R.id.chat_top_nick);  
  15.             nick_tv.setText(chatNick);  
  16.               
  17.             Button send_btn=(Button) findViewById(R.id.chat_btn_send);  
  18.             send_btn.setOnClickListener(new OnClickListener(){  
  19.                 public void onClick(View arg0) {  
  20.                     EditText input=(EditText) findViewById(R.id.chat_input);  
  21.                     String content=input.getText().toString();  
  22.                     try {  
  23.                         ChatManager cm = ConnUtil.getConnection().getChatManager();  
  24.                         Chat chat=cm.createChat(account, new MessageListener(){  
  25.                             public void processMessage(Chat arg0, Message msg) {  
  26.                                 Log.i("---", msg.getFrom()+"说:"+msg.getBody());  
  27.                                 //添加消息到聊天窗口  
  28.   
  29.                             }  
  30.                         });  
  31.                         Message m=new Message();  
  32.                         m.setBody(content);  
  33.                         chat.sendMessage(m);  
  34.                     } catch (XMPPException e) {  
  35.                         e.printStackTrace();  
  36.                     }  
  37.                 }  
  38.             });  
  39.      }  
  40. }  

在上边的代码中通过

[java]  view plain copy
  1. Message m=new Message();  
  2.                         m.setBody(content);  
  3.                         chat.sendMessage(m);  
发送消息,

有了chat做什么都方便啦

测试可以用spark,

下面看效果图:




PS:图片显示不完整可在新窗口中查看,或者调整博客配置,嘿嘿。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值