2012-10-25 7 views
7

Sono in grado di aggiungere Entry all'account Xmpp utilizzando questo codice. non riesco ad avere l'abbonamento "entrambi", invece sto ricevendo none.Come aggiungere e sottoscrivere una voce jabber nel mio account XMPP?

roster.createEntry("[email protected]", "abc", null);

Come aggiungere la voce con la presenza type=both, quando ho registrarmi ingresso a questo account. Voglio sapere se la funzionalità xmpp publish-subscribe?

  1. Come ottenere le notifiche di presenza in entrata?
  2. Come inviare notifiche di presenza in uscita?

EDIT:

public void Addcontact() {  
    Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual); 
    Roster roster = m_connection.getRoster(); 

    if(!roster.contains("[email protected]")) {  try {   
      roster.createEntry("[email protected]", "pa", null);    
     } catch (XMPPException e) {   
      e.printStackTrace(); 
     } 
    }else { 
     Log.i("Acc = ", "contains"); 
    } 
} 

Io sono l'aggiunta di entrata in questo modo ancora sto ottenendo Presenza Type = nessuno ..

risposta

12

ecco come lo aggiungo un altro amico nella mia applicazione.

protected void doAddContactToListAsync(String address, String name, 
       ContactList list) throws ImException { 
      debug(TAG, "add contact to " + list.getName()); 
      Presence response = new Presence.Type.subscribed); 
      response.setTo(address); 

      sendPacket(response); 

      Roster roster = mConnection.getRoster(); 
      String[] groups = new String[] { list.getName() }; 
      if (name == null) { 
       name = parseAddressName(address); 
      } 
      try { 
       // final String name = parseAddressName(address); 
       // Log.v(tag, msg) 

       roster.createEntry(address, name, groups); 

       // If contact exists locally, don't create another copy 
       Contact contact = makeContact(name, address); 
       if (!containsContact(contact)) 
        notifyContactListUpdated(list, 
          ContactListListener.LIST_CONTACT_ADDED, contact); 
       else 
        debug(TAG, "skip adding existing contact locally " + name); 
      } catch (XMPPException e) { 
       throw new RuntimeException(e); 
      } 
     } 

basta usare la parte essenziale

Presence response = new Presence.Type.subscribed); 
response.setTo(address); 
sendPacket(response); 

Roster roster = mConnection.getRoster(); 
roster.createEntry(address, name, groups); 

Per ascoltare richiesta in entrata, registro addPacketListener alla connessione

mConnection.addPacketListener(new PacketListener() { 

      @Override 
      public void processPacket(Packet packet) { 

       Presence presence = (Presence) packet; 
        if (presence.getType() == Type.subscribe) { 
        debug(TAG, "sub request from 1" + address); 
//Implement accept or reject depend on user action. 
      mContactListManager.getSubscriptionRequestListener() 
          .onSubScriptionRequest(contact); 
//or you can test with send back Presence.subscribe first and send Presence.subscribed back to requester. 


       } else {// Handle other Presence type. 
        int type = parsePresence(presence); 
        debug(TAG, "sub request from " + type); 
        contact.setPresence(new Presence(type, 
          presence.getStatus(), null, null, 
          Presence.CLIENT_TYPE_DEFAULT)); 

       } 
      } 
     }, new PacketTypeFilter(Presence.class)); 

     mConnection.connect(); 

Il giusto ordine:

  1. Utente1 invia Iscriviti a user2.
  2. Utente2 invia Sottoscritto e Iscritto all'utente1.
  3. Utente1 invia Iscritto all'utente2.

altro in modo question è possibile controllare

+0

Sto usando questo codice roster.createEntry (indirizzo, nome, gruppi); Sto ancora digitando type to type = none. come posso usare il codice di presenza sopra dopo aver creato la voce completata .. –

+0

Non penso che l'ordine sia il problema. Perché quando aggiungi un contatto è uguale a creare una voce nel tuo elenco e inviare una richiesta di iscrizione. –

+0

Sono stato aggiornato il mio codice con il nuovo codice aggiunto come sto aggiungendo la voce, dopo queste modifiche anche sto diventando tipo di presenza = nessuno. –