Android使用Smack添加FRIEND

时间:2012-10-10 05:58:49

标签: android smack livechat

我是使用smack库并制作一个聊天应用程序的新手。我已经做了很多工作,在这一步我想问两个问题。

  1. 当我添加朋友时,朋友已添加到我的列表中,但没有任何通知发送给我已添加的FRIEND,如何实现相同。我已添加以下代码。

  2. 我想问的第二件事是,如何检查我要添加的用户是否是应用程序的一部分或成员(意味着它是否在服务器上)。因此,不应将未注册到应用程序的用户添加到好友列表中。

  3. 这是代码

    public static boolean addFriend(String jid) {
                String nickname = null;
                nickname = StringUtils.parseBareAddress(jid);
                RosterEntry entry4 = roster.getEntry("samsad");
                if (!roster.contains(jid)) {
                    try {
                        Presence subscribe = new Presence(Presence.Type.subscribe);
                        subscribe.setTo(jid);               
                        connection.sendPacket(subscribe);               
                        roster.createEntry(jid, nickname, null);
                          // Send a roster entry (any) to user2
                        RosterExchangeManager REM = new RosterExchangeManager(connection);
                        REM.send(entry4, jid);
                        return true;
                    } catch (XMPPException e) {
                        System.err.println("Error in adding friend");
                        return false;
                    }
                } else {
                    return false;
                }
            }
    

    在后台服务中运行的Roster Exchange Manager

    /**Remotr Exchange Manager*/
                 RosterExchangeManager rem = new RosterExchangeManager(connection);
                  // Create a RosterExchangeListener that will iterate over the received roster entries
                  RosterExchangeListener rosterExchangeListener = new RosterExchangeListener() {
                      public void entriesReceived(String from, Iterator remoteRosterEntries) {
                          notification("Receive==4");
                          while (remoteRosterEntries.hasNext()) {
                              try {
                                  // Get the received entry
                                  RemoteRosterEntry remoteRosterEntry = (RemoteRosterEntry) remoteRosterEntries.next();
                                  // Display the remote entry on the console
                                  System.out.println(remoteRosterEntry);
                                  // Add the entry to the user2's roster
                                  roster.createEntry(
                                      remoteRosterEntry.getUser(),
                                      remoteRosterEntry.getName(),
                                      remoteRosterEntry.getGroupArrayNames());
                                  notification("Receive==1");   
                              }
                              catch (XMPPException e) {
                                  e.printStackTrace();
                              }
                          }
                      }
                  };
                  rem.addRosterListener(rosterExchangeListener);
            }
            else{
                showToast("Connection lost-",0);
            }
        }
    

1 个答案:

答案 0 :(得分:1)

1,问题是您必须在连接到服务器之前为Presence.Type.subscribe注册PacketListener。添加和接受朋友的所有过程我在here

中回答

2,您可以使用UserSearch类搜索特定用户,如果在服务器上找不到用户,则可以认为该用户未在服务器上注册。