接口定义请参考上篇,实现接口采用的是成熟的第三方asmack包,asmack是smack的android版,而smack是一个已经相对成熟的封装xmpp协议的第三方jar包。服务器端安装openfire服务器,通过调用asmack的相关接口可以进行用户间通信。
在写代码之前先简单介绍几个常用类
1:ConnectionConfiguration 这是一个xmpp连接的配置类 可以通过 ConnectionConfiguration imConfig = new ConnectionConfiguration(IMConfig.IMSERVER, IMConfig.IMPORT); 配置服务器的ip和接口。
2: XMPPConnection xmpp连接管理类,通过ConnectionConfiguration 配置好相关设置后,通过imConnection = new XMPPConnection(imConfig);创建一个新的连接。
3: Roster roster相当于联系人列表,里面存储了联系人相关信息。
4:Preference 状态:分为:在线,离线,等。(4种状态)。
具体接口实现代码如下:
public class IMChat implements IMChatImpl {
protected static final String TAG = "IMChat";
private Context iContext;
private static IMChat chatInstance = null;
private ConnectionConfiguration imConfig;
private XMPPConnection imConnection;
private Roster roster;
private FileTransferManager fileTransferManager;
private ArrayList<FriendRoster> friendList;
private RecentDao recentDao;
private MessageDao messageDao;
/**
* 保持自动重连
*/
static {
try {
Class.forName("org.jivesoftware.smack.ReconnectionManager");
} catch (ClassNotFoundException ex) {
// problem loading reconnection manager
}
}
private IMChat(Context context) {
iContext = context.getApplicationContext();
initIMConnection();
}
private void initIMConnection() {
recentDao = new RecentDao(iContext);
messageDao = new MessageDao(iContext);
imConfig = new ConnectionConfiguration(IMConfig.IMSERVER,
IMConfig.IMPORT);
imConfig.setCompressionEnabled(false);
imConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
imConfig.setReconnectionAllowed(true);
imConfig.setSendPresence(true);
imConfig.setDebuggerEnabled(false);
chatConfig();
imConnection = new XMPPConnection(imConfig);
}
private void chatConfig() {
ProviderManager pm = ProviderManager.getInstance();
/