xmpp

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);

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值