openfire,XMPP,smack,android下离线消息的接收

登录之后呢,先设置离线,不然是收不到离线消息的,处理完离线消息后(比如说保存到数据库),就可以设置为在线了

这里呢,创建一个离线消息工具类

/**
 * 离线信息管理类.
 */
public class OfflineMsgManager {
	private static OfflineMsgManager offlineMsgManager = null;
	private IActivitySupport activitySupport;
	private Context context;

	private OfflineMsgManager(IActivitySupport activitySupport) {
		this.activitySupport = activitySupport;
		this.context = activitySupport.getContext();
	}

	public static OfflineMsgManager getInstance(IActivitySupport activitySupport) {
		if (offlineMsgManager == null) {
			offlineMsgManager = new OfflineMsgManager(activitySupport);
		}

		return offlineMsgManager;
	}

	/**
	 * 
	 * 处理离线消息.
	 * 
	 * @param connection
	 */
	public void dealOfflineMsg(XMPPConnection connection) {
		OfflineMessageManager offlineManager = new OfflineMessageManager(
				connection);
		try {
			Iterator<org.jivesoftware.smack.packet.Message> it = offlineManager
					.getMessages();
			Log.i("离线消息数量: ", "" + offlineManager.getMessageCount());
			while (it.hasNext()) {
				org.jivesoftware.smack.packet.Message message = it.next();
				Log.i("收到离线消息", "Received from 【" + message.getFrom()
						+ "】 message: " + message.getBody());
				if (message != null && message.getBody() != null
						&& !message.getBody().equals("null")) {

					String from = message.getFrom().split("/")[0];
					msg.setFromSubJid(from);
			}

			offlineManager.deleteMessages();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}
在登陆后执行,但是必须设置为离线Presence presence = new Presence(Presence.Type.unavailable);connection.sendPacket(presence);
OfflineMsgManager.getInstance(context).dealOfflineMsg(connection);//处理离线消息,上下文的话自己设置

好,都讲完了,还有聊天室的实现。在下节我就直接贴测试代码,需要在界面上怎么实现,自己可以用好的方法去实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值