2012-10-10 15 views
5

Soy nuevo en el uso de la biblioteca smack y hago una aplicación de chat. He hecho hasta cierto punto y en este paso quiero hacer dos preguntas.Android AGREGAR AMIGO usando Smack

  1. cuando agrego un amigo del amigo se añadió en mi lista, pero no hay ninguna comunicación remitida a la amiga a la que he añadido, ¿Cómo lograr el mismo. He agregado el código a continuación.

  2. Lo segundo que quiero preguntar es que cómo puedo verificar si el usuario que voy a agregar es parte o miembro de la aplicación o no (significa que está en el servidor o no). Para que el usuario que no está registrado en la aplicación no se agregue a la lista de amigos.

Este es el código

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

gerente Lista Exchange que se ejecuta en el servicio en segundo plano

/**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); 
     } 
    } 
+0

@Trickster por favor responde ahora –

Respuesta

1

1, el problema se debe registrar un PacketListener para Presence.Type.subscribe antes de conectarse a servidor. Todo el proceso de agregar y aceptar amigo que respondí en here

2, Puede utilizar la clase UserSearch para buscar un usuario específico y si el usuario no se encuentra en el servidor, puede suponer que el usuario no está registrado en el servidor.

+0

¿Dónde está el ejemplo para el código del cual puedo verificar si él/ella está disponible en el servidor? –

+1

Ayúdeme en esto :( –

+0

Pruebe [esto] (http://stackoverflow.com/a/6936698/1050058) solución para ** 2. ** –