Android xmpp协议 之 openfire 通讯
2015-08-06 11:43
351 查看
1、smack.jar中相关类概述
PacketListener 接收消息类 (单聊、聊天室)@Override public void processPacket(Packet packet) { if (packet instanceof Message) { Message message = (Message) packet; if (TextUtils.isEmpty(message.getBody())) { return; } if (Message.Type.groupchat.equals(message.getType())){ helper.push(message); } else if (Message.Type.chat.equals(message.getType())){ helper.push(message); } } else if (packet instanceof Presence) { loadGroup(packet); } }
根据 message可以获取 在线消息 Message.Type.groupchat 聊天室消息; Message.Type.chat 单聊消息
根据 Presence可以获取 成员状态
Presence pre = (Presence) packet; if (Presence.Type.unavailable.equals(pre.getType())) { /** * 监听退出聊天室 */ String str[] = pre.getFrom().split("/"); String strRoom[] = str[0].split("@"); } else if (Presence.Type.available.equals(pre.getType())) { /** * 监听加入聊天室 */ String str[] = pre.getFrom().split("/"); String strRoom[] = str[0].split("@"); }
根据 InvitationListener 监听聊天室邀请
@Override public void invitationReceived(Connection conn, String roomJid, String inviter, String reason, String password, Message message) { String str[] = reason.split("/"); String roomName = str[0]; String roomOwner = str[1]; String roomId = SmackUtil.getRoom(roomJid); try { // 监听群组邀请 MultiUserChat muc = new MultiUserChat(conn, roomJid); if (muc != null) { muc.addParticipantStatusListener(statusListener); // 聊天室服务将会决定要接受的历史记录数量 DiscussionHistory history = new DiscussionHistory(); history.setSince(DateUtils.minusDate(new Date(), 2)); muc.join(XmppUtils.USER_ACCOUNT, password, history,SmackConfiguration.getPacketReplyTimeout()); } } catch (XMPPException e) { Log.i("XmppService - invitationListener:" + e.getMessage()); } }
ConnectionListener 获取重连接
@Override public void connectionClosed() { Log.i("MyConnectionListener - connectionClosed"); XmppUtils.closeConn(); // 重连服务器 tExit = new Timer(); tExit.schedule(new Timetask(), logintime); } @Override public void connectionClosedOnError(Exception e) { Log.i("MyConnectionListener - connectionClosedOnError"); boolean error = e.getMessage().equals("stream:error (conflict)"); if (!error) { XmppUtils.closeConn(); // 重连服务器 tExit = new Timer(); tExit.schedule(new Timetask(), logintime); } } @Override public void reconnectingIn(int arg0) { Log.i("MyConnectionListener - reconnectingIn: " + arg0); } @Override public void reconnectionFailed(Exception arg0) { Log.i("MyConnectionListener - reconnectionFailed: " + arg0); } @Override public void reconnectionSuccessful() { Log.i("MyConnectionListener - reconnectionSuccessful: " ); /** * 获取IM离线消息 */ getOffline(); /** * 发送在线状态 */ XmppUtils.updateToAvailable(); }
相关文章推荐
- Android Studio之软件安装教程
- Android开发框架 afinal
- 学习android编程之路(6)— InputStream与OutputStream的比较
- Android 03:如何控制Android应用程序的窗体显示.
- android_空指针异常
- Android重启当前Activity以及Activity生命周期的变化
- Android开发笔记----界面布局及在布局上动态地增加删除子元素
- Android获取手机经纬度(GPS、NetWork)封装工具类
- Android中padding的用法总结
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- android缓存框架ASimpleCache
- [Android效果]Android中实现闪屏的欢迎界面
- Android实现两次点击返回键提示退出
- android中Toast显示时间自定义使用
- Android Debug 笔记
- Activity launchMode,taskAffinity,Intent.Flag
- android包解包、打包、签名
- Android--Camera.addCallbackBuffer/setPreviewCallbackWithBuffer模式使用总结
- 针对android录影编写测试程序
- android 管理Bitmap的内存使用