2012-03-20 2 views
6

Cette erreur se trouve dans le journal.Transfert de fichiers en utilisant smack dans les applications 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> 

J'ai utilisez le code suivant ici

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

quelle version de smack utilisez-vous? – Hussain

+0

asmack15 J'essaie à partir de 5 jours mais je ne peux pas encore transférer le fichier par smack. si vous avez une idée à ce sujet s'il vous plaît aider – Kutbi

+0

@Hussain j'ai utilisé cette version de smack: -asmack-android-7-beem.jar –

Répondre

1

J'ai résolu le même problème en effectuant cette procédure suivante. J'utilise asmack-2010.05.07-source en eclipse pour android-2.2.

Optez pour la classe ProviderManager dans le composant asmack. Remplacez le code suivant

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

avec ce

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

Après cela, vous devez faire un patch. Ajoutez la fonction suivante avant de créer le new XMPPConnection. Vous pouvez appeler cette fonction par

configure(ProviderManager.getInstance()); 

Ceci est la méthode.

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

Je suis la solution à partir du lien suivant http://code.google.com/p/asmack/issues/detail?id=23

+0

j'ai essayé ceci..Mais mon problème encore ici. Ce n'est pas résolu. –

+0

Comment inclure la bibliothèque asmack pour mon projet android. je reçois tellement d'erreurs – Roster

1

Merci, Mais je résolu mes problèmes .. Le problème est que l'utilisateur en face est pas connecté. Donc je l'ai installer simplement sous forme de Sparkx de Clinet http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe et connecté en utilisant un autre utilisateur et c'est tout.

Voici le code de travail complet. vous devez configurer votre serveur et le port dans General.java aussi j'ai des utilisateurs fixes dans l'activité que vous avez besoin de changer selon votre configuration.

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

Questions connexes