Android ADD FRIEND usando Smack

Soy nuevo en el uso de smack biblioteca y hacer una aplicación de chat. He hecho hasta en gran medida y en este paso quiero hacer dos preguntas.

  1. Cuando agrego a un amigo el amigo se agregó en mi lista pero no hay ninguna notificación enviada al AMIGO a quien he agregado, ¿Cómo lograr lo mismo. He añadido el código a continuación.

  2. La segunda cosa que quiero preguntar es que cómo puedo comprobar si el usuario que voy a agregar es una parte o miembro de la aplicación o no (lo que significa que está en el servidor o no). Para que el usuario que no está registrado en la aplicación no se debe agregar en la lista de amigos.

Aquí está 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; } } 

Director de Intercambio de Intercambio 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); } } 

1, El problema es que debe registrar un PacketListener para Presence.Type.subscribe antes de conectarse al servidor. Todo el proceso de agregar y aceptar amigo que respondí aquí

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.

  • Autenticar a Google Talk (XMPP, Smack) mediante un authToken
  • Cómo obtener el valor de atributo personalizado de un mensaje XMPP XML?
  • Cómo saber Escribir Estado en XMPP openfire usando Smack
  • ¿Cómo puedo agregar un atributo personalizado (nick) en mi etiqueta de mensaje XMPP, en Smack 4.1
  • GetSearchForm devuelve null cuando se utiliza UserSearch en XMPP con aSmack
  • Cómo recibir mensajes sin usar createChat para android XMPP chat smack api
  • No se puede enviar o recibir presencia con ASmack
  • Smack "Debe tener un conjunto JID local (usuario)" error
  • Mensajes perdidos con aSmack
  • Problema en el bloqueo de usuario en la lista de chat usando smack y servidor de fuego abierto
  • SASLError utilizando PLAIN: no autorizado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.