android端怎么接收openfire服务器发送过来的消息

 我来答
sun时空之门
推荐于2018-04-13 · TA获得超过8852个赞
知道小有建树答主
回答量:1559
采纳率:68%
帮助的人:157万
展开全部
  • android客户端接收 openfire 服务器发送来的消息:

    • 客户端代码如下:

        1. Java代码  

        2. package com.example.openfiretest;  

        3.   

        4. import org.jivesoftware.smack.Chat;  

        5. import org.jivesoftware.smack.ChatManager;  

        6. import org.jivesoftware.smack.ChatManagerListener;  

        7. import org.jivesoftware.smack.ConnectionConfiguration;  

        8. import org.jivesoftware.smack.MessageListener;  

        9. import org.jivesoftware.smack.XMPPConnection;  

        10. import org.jivesoftware.smack.packet.Message;  

        11.   

        12. import android.os.Bundle;  

        13. import android.os.Handler;  

        14. import android.app.Activity;  

        15. import android.content.Intent;  

        16. import android.view.Menu;  

        17. import android.view.View;  

        18. import android.view.View.OnClickListener;  

        19. import android.view.Window;  

        20. import android.widget.CheckBox;  

        21. import android.widget.EditText;  

        22. import android.widget.Toast;  

        23.   

        24. public class MainActivity extends Activity {  

        25.       

        26.       

        27.       

        28.     private EditText accountEditText;  

        29.     private EditText passwordEditText;  

        30.   

        31.     public void onCreate(Bundle savedInstanceState) {  

        32.         super.onCreate(savedInstanceState);  

        33.         requestWindowFeature(Window.FEATURE_NO_TITLE);  

        34.         setContentView(R.layout.activity_main);  

        35.         accountEditText = (EditText) findViewById(R.id.username);  

        36.         passwordEditText = (EditText) findViewById(R.id.password);  

        37.   

        38.         findViewById(R.id.login).setOnClickListener(new OnClickListener() {  

        39.             public void onClick(View v) {  

        40.                 String account = accountEditText.getText().toString();  

        41.                 String password = passwordEditText.getText().toString();  

        42.                 if (account.equals("") || password.equals("")) {  

        43.                     Toast.makeText(MainActivity.this, "账号或密码不能为空!",  

        44.                             Toast.LENGTH_SHORT).show();  

        45.                 } else {  

        46.                     ClientConServer ccs = new ClientConServer(MainActivity.this);  

        47.                     boolean b = ccs.login(account, password);  

        48.                     // 如果登录成功  

        49.                     if (b) {  

        50.                         Toast.makeText(MainActivity.this, "登陆成功!",  

        51.                                 Toast.LENGTH_SHORT).show();  

        52.                           

        53.                           

        54.                     } else {  

        55.                         Toast.makeText(MainActivity.this, "登陆失败!",  

        56.                                 Toast.LENGTH_SHORT).show();  

        57.                     }  

        58.                 }  

        59.             }  

        60.         });  

        61.     }  

        62.       

    • 然后在登陆以后添加一个监听消息的监听器,用来监听收到的消息(代码89、90行): 

      1. Java代码  

      2. package com.example.openfiretest;  

      3.   

      4. import java.util.Collection;  

      5.   

      6. import org.jivesoftware.smack.Chat;  

      7. import org.jivesoftware.smack.ChatManager;  

      8. import org.jivesoftware.smack.ChatManagerListener;  

      9. import org.jivesoftware.smack.ConnectionConfiguration;  

      10. import org.jivesoftware.smack.MessageListener;  

      11. import org.jivesoftware.smack.Roster;  

      12. import org.jivesoftware.smack.RosterEntry;  

      13. import org.jivesoftware.smack.RosterGroup;  

      14. import org.jivesoftware.smack.XMPPConnection;  

      15. import org.jivesoftware.smack.XMPPException;  

      16. import org.jivesoftware.smack.packet.Message;  

      17.   

      18.   

      19. import android.content.Context;  

      20. import android.content.Intent;  

      21. import android.os.Handler;  

      22. import android.util.Log;  

      23. import android.widget.Toast;  

      24.   

      25. public class ClientConServer {  

      26.     private static int PORT=5222;  

      27.     private Context context;  

      28.     public ClientConServer(Context context){  

      29.         this.context=context;  

      30.   

      31.     }  

      32.     //这里收到消息后,通过广播将消息发送到需要的地方.哈哈,既然收到了服务器发送来的信息,如何处理自己决定。  

      33.     private Handler handler = new Handler(){    

      34.         public void handleMessage(android.os.Message m) {    

      35.             Message msg=new Message();    

      36.             msg=(Message) m.obj;   

      37.             //把从服务器获得的消息通过广播发送    

      38.             Intent intent = new Intent("org.yhn.mes");    

      39.             String[] message=new String[]{    

      40.                     msg.getFrom(),    

      41.                     msg.getBody()};   

      42.             System.out.println("==========收到服务器消息  From==========="+message[0].toString());  

      43.             System.out.println("==========收到服务器消息  Body==========="+message[1].toString());  

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

      45.             context.sendBroadcast(intent);    

      46.         };    

      47.     };  

      48.       

      49.     public boolean login(String a,String p){  

      50.         ConnectionConfiguration config = new ConnectionConfiguration("192.168.0.124", PORT);  

      51.         /** 是否启用安全验证 */  

      52.         config.setSASLAuthenticationEnabled(false);  

      53.         /** 是否启用调试 */  

      54.         //config.setDebuggerEnabled(true);  

      55.         /** 创建connection链接 */  

      56.         XMPPConnection connection = new XMPPConnection(config);  

      57.         try {  

      58.             /** 建立连接 */  

      59.             connection.connect();  

      60.               

      61.               

      62.             /** 登录*/  

      63.             connection.login(a, p);  

      64.             /** 开启读写线程,并加入到管理类中*/  

      65.             //ClientSendThread cst=new ClientSendThread(connection);  

      66.             //cst.start();  

      67.             //ManageClientThread.addClientSendThread(a, cst);  

      68.               

      69.             //获取用户组、成员信息。  

      70.             System.out.println("======开始获取组及用户==========");  

      71.             Roster roster = connection.getRoster();  

      72.             Collection<RosterGroup> entriesGroup = roster.getGroups();  

      73.             System.out.println("组的个数:"+entriesGroup.size());  

      74.             for(RosterGroup group: entriesGroup){  

      75.                 Collection<RosterEntry> entries = group.getEntries();  

      76.                 System.out.println("=========groupName==="+group.getName());  

      77.                 for (RosterEntry entry : entries) {  

      78.                     //Presence presence = roster.getPresence(entry.getUser());  

      79.                     //Log.i("---", "user: "+entry.getUser());  

      80.                     System.out.println("组成员名字:"+entry.getName());  

      81.                     //Log.i("---", "tyep: "+entry.getType());  

      82.                     //Log.i("---", "status: "+entry.getStatus());  

      83.                     //Log.i("---", "groups: "+entry.getGroups());  

      84.                 }  

      85.             }  

      86.             System.out.println("======结束获取组及用户==========");  

      87.               

      88.               

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

      90.             ChatManager chatManager = connection.getChatManager();  

      91.             chatManager.addChatListener(new MyChatManagerListener());  

      92.               

      93.               

      94.             return true;  

      95.         } catch (XMPPException e) {  

      96.             e.printStackTrace();  

      97.         }  

      98.         return false;  

      99.      }  

      100.     /** message listener*/    

      101.     class MyChatManagerListener implements ChatManagerListener {    

      102.           

      103.           

      104.         public void chatCreated(Chat chat, boolean arg1) {    

      105.             chat.addMessageListener(new MessageListener(){    

      106.                 public void processMessage(Chat arg0, Message msg) {    

      107.                     /**通过handler转发消息*/    

      108.                     android.os.Message m=handler.obtainMessage();    

      109.                     m.obj=msg;    

      110.                     m.sendToTarget();   

      111.                       

      112.                       

      113.                 }    

      114.             });    

      115.         }   

      116.     }  

      117. }  

  • 启动android客户端,进行登录

  • 然后在openfire的管理控制台,会话-工具中发送消息给所有在线用户

  • 即可看到打印信息:在管理控制台发送的消息


本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-02-20
展开全部
用openfire+asmack。具体的你可以google了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式