1. xmpp 登录:
ConnectionConfiguration mConf = new ConnectionConfiguration(XMPP_SERVER_IP,XMPP_SERVER_PORT, "");
XmppConnection xmppConnection = new XMPPConnection(mConf);
xmppConnection.connect();
xmppConnection.login(LOCAL_ACCOUNT, LOCAL_ACCOUNT_PWD);
2. xmpp重连接:
Class.forName("org.jivesoftware.smack.ReconnectionManager");
3. 注册账号:
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(xmppConnection .getServiceName());
reg.setUsername(account);
reg.setPassword(Const.XMPP_ACCOUNT_PASSWORD);
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = xmppConnection.createPacketCollector(filter);
xmppConnection.sendPacket(reg); IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
collector.cancel();
if (result != null && result.getType() == IQ.Type.RESULT) {
//do other
}
4. 添加好友
int index =pk.getFrom()..indexOf("@");
Item item == new Item(pk.getFrom().substring(0, index), null);
RosterPacket rosterPacket = new RosterPacket();
rosterPacket .setTo(xmppConnection .getServiceName());
rosterPacket.setType(IQ.Type.SET);
rosterPacket.addRosterItem(item);
PacketFilter filter = new AndFilter(new PacketIDFilter(rosterPacket.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = xmppConnection .createPacketCollector(filter);
xmppConnection.sendPacket(rosterPacket);
IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
collector.cancel();
if (result != null && result.getType() == IQ.Type.RESULT) {
}
5.判断是否是好友
private static boolean isRoserExist(Item item) {
Roster roster = xmppConnection.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
String user = null;
String jid = item.getUser();
for (RosterEntry entry : entries) {
user = entry.getUser();
if (jid.equals(user)) {
return true;
}
}
return false;
}
6. 判断用户是否在线
/ * @param strUrl "http://" + Const.XMPP_SERVER_IP + ":9090"
+ "/plugins/presence/status?jid=" + entry.getUser()
+ Const.XMPP_ROSER_SUFFIX + "&type=xml"
* @return 0:账户不存在 1:用户在线 2:用户不在线
*/
private static short isUserOnLine(String strUrl) {
Log.d(LOG_TAG, "请求地址:" + strUrl);
short shOnLineState = 0;
try {
URL oUrl = new URL(strUrl);
URLConnection oConn = oUrl.openConnection();
if (oConn != null) {
BufferedReader oIn = new BufferedReader(new InputStreamReader(
oConn.getInputStream()));
if (null != oIn) {
String strFlag = oIn.readLine();
oIn.close();
if (strFlag.indexOf("type=\"unavailable\"") >= 0) {
shOnLineState = 2;
}
if (strFlag.indexOf("type=\"error\"") >= 0) {
shOnLineState = 0;
} else if (strFlag.indexOf("priority") >= 0
|| strFlag.indexOf("id=\"") >= 0) {
shOnLineState = 1;
}
}
}
} catch (Exception e) {
}
return shOnLineState;
}
7. 列出所有的好友
Roster roster = mConnection.getRoster();
Collection<RosterEntry> it = roster.getEntries();
ArrayList<String> friends = new ArrayList<String>();
for (RosterEntry rosterEnter : it) {
friends.add(rosterEnter.getUser());
System.out.println("列出好友: ---->" + rosterEnter.getUser());
}
8. 删除好友
Roster roster = mConnection.getRoster();
Collection<RosterEntry> it = roster.getEntries();
for (RosterEntry rosterEnter : it) {
roster.removeEntry(rosterEnter);
break;
}
搜索好友
UserSearchManager search = new UserSearchManager(mConnection);
Form searchForm = search.getSearchForm("search.jz");
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Username", true);
//test 为搜索的用户的名称
answerForm.setAnswer("search", "test");
ReportedData data = search.getSearchResults(answerForm, "search.jz");
Iterator<Row> it = data.getRows();
Row row = null;
String ansS = "";
while (it.hasNext()) {
row = it.next();
ansS += row.getValues("Username").next().toString() + "\n";
Log.d(LOG_TAG, row.getValues("Username").next().toString());
}
离线消息
ConnectionConfiguration mConf = new ConnectionConfiguration(
XMPP_SERVER_IP, XMPP_SERVER_PORT, "");
mConf.setSendPresence(false);
OfflineMessageManager mOfflineMessageManager = new OfflineMessageManager(mConnection);
try {
Iterator<Message> mIterator = mOfflineMessageManager
.getMessages();
while (mIterator.hasNext()) {
System.out.println("receive offline message--->");
Message message = (Message) mIterator.next();
String from = message.getFrom();
String content = message.getBody();
}
} catch (XMPPException e) {
e.printStackTrace();
}
try {
mOfflineMessageManager.deleteMessages();
} catch (XMPPException e) {
e.printStackTrace();
}
Presence presence = new Presence(Presence.Type.available);
mConnection.sendPacket(presence);