2015年1月25日 星期日

Android 基於xmpp協議,smack包,openfire服務端的高仿QQ的即時通訊實現【5】消息發送...

http://www.apkbus.com/blog-125132-52804.html

这一节就是消息发送与接收的实现了
接收消息主要代码:
[html] view plaincopy
  1. //消息监听  
  2.         ChatManager cm = XmppConnection.getConnection().getChatManager();         
  3.         //发送消息给pc服务器的好友(获取自己的服务器,和好友)  
  4.         final Chat newchat = cm.createChat(pFRIENDID, null);  
  5.         cm.addChatListener(new ChatManagerListener() {  
  6.             @Override  
  7.             public void chatCreated(Chat chat, boolean able) {  
  8.                 chat.addMessageListener(new MessageListener() {  
  9.                     @Override  
  10.                     public void processMessage(Chat chat, Message message) {  
  11.                         //收到来自pc服务器的消息(获取自己好友发来的信息)  
  12.                         if(message.getFrom().contains(userChat))  
  13.                         {  
  14.                             //获取用户、消息、时间、IN  
  15.                             String[] args = new String[] {userChat, message.getBody(), TimeRender.getDate(), "IN" };  
  16.                             //在handler里取出来显示消息  
  17.                             android.os.Message msg = handler.obtainMessage();  
  18.                             msg.what = 1;  
  19.                             msg.obj = args;  
  20.                             msg.sendToTarget();  
  21.                         }  
  22.                     }  
  23.                 });  
  24.             }  
  25.         });  

发送消息注意代码:

[html] view plaincopy
  1. //发送消息  
  2.         Button btsend = (Button) findViewById(R.id.formclient_btsend);  
  3.         btsend.setOnClickListener(new OnClickListener() {  
  4.             @Override  
  5.             public void onClick(View v) {  
  6.                 //获取text文本  
  7.                 String msg = msgText.getText().toString();            
  8.                 if(msg.length() > 0){  
  9.                     //发送消息  
  10.                     listMsg.add(new Msg(pUSERID, msg, TimeRender.getDate(), "OUT"));  
  11.                     //刷新适配器  
  12.                     adapter.notifyDataSetChanged();               
  13.                     try {  
  14.                         //发送消息  
  15.                         newchat.sendMessage(msg);                     
  16.                     }catch (XMPPException e)  
  17.                     {  
  18.                         e.printStackTrace();  
  19.                     }  
  20.                 }  
  21.                 else  
  22.                 {  
  23.                     Toast.makeText(ChatActivity.this, "发送信息不能为空", Toast.LENGTH_SHORT).show();  
  24.                 }  
  25.                 //清空text  
  26.                 msgText.setText("");  
  27.             }  
  28.         });  

以下是修改心情的实现,你在自建客户端修改心情,Spark端会即时修改;


主要代码:
[html] view plaincopy
  1. myMood = ((EditText)myMoodView.findViewById(R.id.myMood)).getText().toString().trim();  
  2.                     System.out.println("我更改的心情是:"+myMood);  
  3.                     XmppService.changeStateMessage(connection, myMood);  
  4.                     myStatusText.setText(myMood);  

[html] view plaincopy
  1. /**   
  2.      * 修改心情   
  3.      * @param connection   
  4.      * @param status   
  5.      */    
  6.     public static void changeStateMessage(final XMPPConnection connection,final String status)    
  7.     {    
  8.         Presence presence = new Presence(Presence.Type.available);    
  9.         presence.setStatus(status);    
  10.         connection.sendPacket(presence);        
  11.     }