XMPP_Android上测试收发即时文本消息

来源:互联网 发布:spps怎么实现数据筛选 编辑:程序博客网 时间:2024/04/23 17:16

smack插件下载地址:http://www.igniterealtime.org/downloads/index.jsp  (截至2013.11.7,最新版本是3.3.1了),

更详细信息可以参考:smack_3_3_1/documentation/index.html

服务器使用Openfire,客户端的开发借助开源的Smack。

Smack插件可以很方便的嵌入到JDK 1.5或更高的Java应用程序中。除了Jingle语音聊天功能外,Smack没有外部依赖关系。

基于此来测试Android终端之间收发即时文本消息。

在应用中使用网络服务时,一定要在应用的Manifest文件中声明权限。核心代码如下所示。

<uses-permission android:name="android.permission.INTERNET" />

1.1登录上线

实现用户(已注册过)之间的即时通信,首先,用户必须与Openfire服务器建立连接。用户与Openfire服务器建立连接成功,会创建XMPPConnection对象。XMPPCOnnection类用于与XMPP服务器创建一个连接。

一旦连接创建成功,需要进行登录。XMPPConnection提供了login方法,输入正确用户名和密码实现登录。核心程序段如下所示。

     /** Openfire服务器Address */  private final static String server = "xx.xx.xx.xx";//服务器IP地址  private static ConnectionConfiguration configuration;    private static XMPPConnection connection;      //XMPP协议默认端口为5222.      configuration = new ConnectionConfiguration(server, 5222);      //与IP为server 的服务器创建连接  connection = new XMPPConnection(configuration);        if (null != connection && connection.isConnected()) {          //登录特定用户          connection.login(userName, passwd);//用户名和密码进行登录  }

其中,connection即为用户(userName)与Openfire服务器之间的连接信息的媒介。一旦登录成功,就可以与其他人进行聊天了。

1.2 向其他用户发送即时消息

从客户端发到XMPP服务器的消息叫做IQ包(封装成XML)。已登录的用户向其他用户发消息时,需要将个人JID、消息接收者JID、消息内容等信息封装成XML信息(即IQ包)以服务器为媒介进行传送。每一次用户之间的聊天,ChatManager都会为其创建一个线程。下面的代码显示了创建一个Chart并发送文本消息。

  String senderJID;//假设被发送者的JID已经获取到.  //注:JID信息为 “用户名@服务器名”.  String sendMsg;//假设欲发送的信息已经获取到.  //假设已经登录成功并创建connection  ChatManager cm = connection.getChatManager();  Chat chat =  chatManager.createChat(senderJID, null);    Message sendMsg = new Message();  sendMsg.setBody(sendMsg);  sendMsg.setFrom(connection.getUser());  chat.sendMessage(sendMsg);

这样,消息就可以发送到Openfire服务器端,服务器端会判断用户是否在线,确定推送到对方客户端或者保存为服务器离线消息。

1.3 接收即时消息

已登陆的用户,可以拦截服务器端推送过来的新消息。为了获取这些新消息,可以注册一个消息监听器去接收所有的消息。ChatManager中的addChatListener方法用来注册监听器ChatManagerListener。实现ChatManagerListener接口的processMessage负责在接收到到服务器端发来的Chart信息时执行处理。

首先,实现ChatManagerListener接口。

  class MyChatManagerListener implements ChatManagerListener {  /**    * 实现消息监听处理接口         * */       public void chatCreated(Chat chat, boolean arg1) {    chat.addMessageListener(new MessageListener() {     public void processMessage(Chat arg0, Message msg) {                                  //接收到即时消息时,进行处理....               }                }  });  }

随后,获取ChatManager 实例,通过它注册消息监听。

  //假设已经登录成功并创建connection  ChatManager cm = connection.getChatManager();  cm.addChatListener(new MyChatManagerListener());

自此,Android终端上即时消息的收和发测试就成功了。



下面是我写的一个简单的客户端demo,下载地址:http://pan.baidu.com/s/1kUA2k

声明一下,这只适用于 初学者快速了解一下 smack 的使用,具体的项目,还请仔细 做一下设计。

不恰当之处还请 指出。

 

 

 

原创粉丝点击