package com.openfire.manager; import java.util.Calendar; import java.util.Iterator; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smackx.OfflineMessageManager; import android.content.Context; import android.content.Intent; import com.partynetwork.dataprovider.util.TimeUtil; import com.partynetwork.iparty.app.entities.IMessage; import com.partynetwork.iparty.app.manager.MessageManager; import com.partynetwork.iparty.imessage.OpenfireConstant; /** * * 离线信息管理类. * */ public class OfflineMsgManager { private static OfflineMsgManager offlineMsgManager = null; private Context context; private OfflineMsgManager(Context context) { this.context = context; } public static OfflineMsgManager getInstance(Context context) { if (offlineMsgManager == null) { offlineMsgManager = new OfflineMsgManager(context); } return offlineMsgManager; } /** * * 处理离线消息. * * @param connection * @author shimiso * @update 2012-7-9 下午5:45:32 */ public void dealOfflineMsg(XMPPConnection connection) { OfflineMessageManager offlineManager = new OfflineMessageManager( connection); try { Iterator<org.jivesoftware.smack.packet.Message> it = offlineManager .getMessages(); while (it.hasNext()) { org.jivesoftware.smack.packet.Message message = it.next(); if (message != null && message.getBody() != null && !message.getBody().equals("null")) { String time = (String) message .getProperty(IMessage.KEY_TIME); time = time == null ? TimeUtil .date2Str(Calendar.getInstance(), OpenfireConstant.MS_FORMART) : time; // 发送者 String from = message.getFrom().split("/")[0]; from=from.substring(0, from.indexOf("@")); // 历史记录 IMessage newMessage = new IMessage(); newMessage.setState(0); newMessage.setIsCome(1); newMessage.setWithUser(from); String utfString=new String(message.getBody().getBytes(), "UTF-8"); newMessage.setContent(utfString); newMessage.setTime(time); if (Message.Type.error == message.getType()) { newMessage.setState(-1); } MessageManager.getInstance(context).saveIMessage(newMessage); Intent intent = new Intent( OpenfireConstant.NEW_MESSAGE_ACTION); intent.putExtra(IMessage.IMMESSAGE_KEY, newMessage); context.sendBroadcast(intent); } } offlineManager.deleteMessages(); } catch (Exception e) { e.printStackTrace(); } } }