登录之后呢,先设置离线,不然是收不到离线消息的,处理完离线消息后(比如说保存到数据库),就可以设置为在线了
这里呢,创建一个离线消息工具类
/**
* 离线信息管理类.
*/
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);//处理离线消息,上下文的话自己设置
好,都讲完了,还有聊天室的实现。在下节我就直接贴测试代码,需要在界面上怎么实现,自己可以用好的方法去实现