2012-03-20 16 views
6

Este error vino en el registro.Transferencia de archivos utilizando smack en aplicaciones de Android.

from='[email protected]/Smack' to='[email protected]/Smack' type='error' id='hK1L6-5'> 
<si xmlns='http://jabber.org/protocol/si' id='jsi_191216212994140179' mime-type='image/png' profile='http://jabber.org/protocol/si/profile/file-transfer'> 
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='this_old_house.png' size='12623'> 
<desc>You won&apos;t believe this!</desc></file> 
<feature xmlns='http://jabber.org/protocol/feature-neg'> 
<x xmlns='jabber:x:data' type='form'><field var='stream-method' type='list-multi'> 
<option><value>http://jabber.org/protocol/bytestreams</value></option> 
<option><value>http://jabber.org/protocol/ibb</value></option> 
</field> 
</x> 
</feature> 
</si> 
<error code='503' type='cancel'> 
<service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> 
</error></iq> 

que tengo uso siguiente código aquí

ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(Main.connection); 
    if (sdm == null) 
     sdm = new ServiceDiscoveryManager(Main.connection); 
    sdm.addFeature("http://jabber.org/protocol/disco#info"); 
    sdm.addFeature("jabber:iq:privacy"); 

    FileTransferNegotiator.setServiceEnabled(Main.connection, true); 
    FileTransferManager manager = new FileTransferManager(Main.connection); 
    OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(id 
      + "/Smack"); 

    Log.i("transfere file", "outgoingfiletransfere is created"); 
    try{ 
     //OutgoingFileTransfer.setResponseTimeout(60000); 
     transfer.sendFile(new File(txt_file.getText().toString()), "You won't believe this!"); 

     if (transfer.getStatus().equals(Status.cancelled) 
       || transfer.getStatus().equals(Status.refused)) { 
       Log.d("Cancel", ""+transfer.getError()); 
       System.out.println("Cancelled!!! " + transfer.getError()); 
      } 

     Log.i("transfere file", "sending file"); 
     Log.d("FTTRY", "m in ft TRY"); 
     btn_transfer.setText("Browse"); 
     txt_file.setText("click on browse n Select File"); 
     send_flag = true; 
    }catch (Exception e) { 
     Log.d("FTCATCH", "m in ft catch"); 
     btn_transfer.setText("BrowseC"); 
     send_flag = true; 
    } 

    while(!transfer.isDone()) { 
     try{ 
      Thread.sleep(1000); 
     }catch (Exception e) { 
     } 
      Log.i("transfere file", "sending file status " 
         + transfer.getStatus() + "progress: " 
         + transfer.getProgress()); 
     if(transfer.getStatus().equals(Status.error)) { 
      System.out.println("ERROR!!! " + transfer.getError()); 
     } else { 
      System.out.println(transfer.getStatus()); 
      System.out.println(transfer.getProgress()); 
      Log.d("PROG", "m in ft progress"); 
     } 
     try{ 
     Thread.sleep(1000); 
     }catch (Exception e) { 
    } 
} 
+0

¿qué versión de smack estás usando? – Hussain

+0

asmack15 intenté desde 5 días pero todavía no puedo transferir el archivo a través de smack. si tienes alguna idea al respecto, ayuda – Kutbi

+0

@Hussain tengo esta versión de smack: -asmack-android-7-beem.jar –

Respuesta

1

He resuelto el mismo problema al hacer esto siguiente procedimiento.

Estoy usando asmack-2010.05.07-source en eclipse para android-2.2.

Vaya a la clase ProviderManager en la carpeta asmack. Vuelva a colocar el siguiente código

Enumeration providerEnum = classLoader.getResources(
         "/META-INF/smack.providers"); 

con este

Enumeration providerEnum = classLoader.getResources(
         "/data/smack.providers"); 

Después de ello, tiene que hacer un parche. Agregue la siguiente función antes de crear el new XMPPConnection. Puede llamar a esta función por

configure(ProviderManager.getInstance()); 

Este es el método.

public void configure(ProviderManager pm) { 

    // Private Data Storage 
    pm.addIQProvider("query","jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider()); 


    // Time 
    try { 
     pm.addIQProvider("query","jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time")); 
    } catch (ClassNotFoundException e) { 
     Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Time"); 
    } 

    // Roster Exchange 
    pm.addExtensionProvider("x","jabber:x:roster", new RosterExchangeProvider()); 

    // Message Events 
    pm.addExtensionProvider("x","jabber:x:event", new MessageEventProvider()); 

    // Chat State 
    pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("composing","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("paused","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("inactive","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("gone","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    // XHTML 
    pm.addExtensionProvider("html","http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider()); 

    // Group Chat Invitations 
    pm.addExtensionProvider("x","jabber:x:conference", new GroupChatInvitation.Provider()); 

    // Service Discovery # Items  
    pm.addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider()); 

    // Service Discovery # Info 
    pm.addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider()); 

    // Data Forms 
    pm.addExtensionProvider("x","jabber:x:data", new DataFormProvider()); 

    // MUC User 
    pm.addExtensionProvider("x","http://jabber.org/protocol/muc#user", new MUCUserProvider()); 

    // MUC Admin  
    pm.addIQProvider("query","http://jabber.org/protocol/muc#admin", new MUCAdminProvider()); 


    // MUC Owner  
    pm.addIQProvider("query","http://jabber.org/protocol/muc#owner", new MUCOwnerProvider()); 

    // Delayed Delivery 
    pm.addExtensionProvider("x","jabber:x:delay", new DelayInformationProvider()); 

    // Version 
    try { 
     pm.addIQProvider("query","jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version")); 
    } catch (ClassNotFoundException e) { 
     // Not sure what's happening here. 
    } 

    // VCard 
    pm.addIQProvider("vCard","vcard-temp", new VCardProvider()); 

    // Offline Message Requests 
    pm.addIQProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider()); 

    // Offline Message Indicator 
    pm.addExtensionProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider()); 

    // Last Activity 
    pm.addIQProvider("query","jabber:iq:last", new LastActivity.Provider()); 

    // User Search 
    pm.addIQProvider("query","jabber:iq:search", new UserSearch.Provider()); 

    // SharedGroupsInfo 
    pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup", new SharedGroupsInfo.Provider()); 

    // JEP-33: Extended Stanza Addressing 
    pm.addExtensionProvider("addresses","http://jabber.org/protocol/address", new MultipleAddressesProvider()); 

    // FileTransfer 
    pm.addIQProvider("si","http://jabber.org/protocol/si", new StreamInitiationProvider()); 

    pm.addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider()); 

    pm.addIQProvider("open","http://jabber.org/protocol/ibb", new IBBProviders.Open()); 

    pm.addIQProvider("close","http://jabber.org/protocol/ibb", new IBBProviders.Close()); 

    pm.addExtensionProvider("data","http://jabber.org/protocol/ibb", new IBBProviders.Data()); 

    // Privacy 
    pm.addIQProvider("query","jabber:iq:privacy", new PrivacyProvider()); 

    pm.addIQProvider("command", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider()); 
    pm.addExtensionProvider("malformed-action", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.MalformedActionError()); 
    pm.addExtensionProvider("bad-locale", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadLocaleError()); 
    pm.addExtensionProvider("bad-payload", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadPayloadError()); 
    pm.addExtensionProvider("bad-sessionid", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadSessionIDError()); 
    pm.addExtensionProvider("session-expired", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.SessionExpiredError()); 
} 

Tengo la solución desde el siguiente enlace http://code.google.com/p/asmack/issues/detail?id=23

+0

He intentado esto ... Pero mi problema sigue aquí. esto no es resolver –

+0

Cómo incluir la biblioteca asmack para mi proyecto de Android. estoy recibiendo tantos errores – Roster

1

Gracias, Pero he resuelto mis problemas .. El problema es que el usuario opuesto no está conectado. Por lo que acabo de instalar forma clinet Sparkx http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe e inició sesión usando otro usuario y eso es todo.

A continuación se muestra el código de trabajo completo. necesita configurar su servidor y puerto en General.java también he reparado usuarios en actividad por lo que debe cambiarlos según su configuración.

https://sites.google.com/site/fancifulandroid/android-projects/FiletransfarXMPP.rar?attredirects=0&d=1

Cuestiones relacionadas