2012-03-20 18 views
6

Questo errore è nel registro.Trasferimento file tramite smack nelle app 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> 

devo uso seguente codice qui

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

quale versione di smack stai usando? – Hussain

+0

asmack15 provo da 5 giorni ma ancora non riesco a trasferire file attraverso un colpo. se avete qualche idea riguardo a questo per favore aiutate – Kutbi

+0

@Hussain ho usato questa versione di smack: -asmack-android-7-beem.jar –

risposta

1

ho risolto lo stesso problema in questo modo seguente procedura.

Sto usando asmack-2010.05.07-source in eclipse per Android-2.2.

Passa alla classe ProviderManager nello spazio. Sostituire il seguente codice

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

con questo

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

Dopo questo è necessario fare una patch. Aggiungere la seguente funzione prima di creare lo new XMPPConnection. Puoi chiamare questa funzione per

configure(ProviderManager.getInstance()); 

Questo è il metodo.

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

ho ottenuto la soluzione dal seguente link http://code.google.com/p/asmack/issues/detail?id=23

+0

ho provato questo ... ma il mio problema ancora qui. questo non è risolvibile. –

+0

Come includere la libreria di asmack per il mio progetto Android. sto ricevendo tanti errori – Roster

1

Grazie, Ma ho risolto i miei problemi .. Il problema è che l'utente opposto non è connesso. Così ho appena installare modulo clinet Sparkx http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe e connesso con altri utenti e il gioco è fatto.

Di seguito è riportato il codice di lavoro completo. è necessario impostare il server e la porta in General.java anche io ho fissato gli utenti in attività, quindi è necessario modificarlo secondo la configurazione.

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

Problemi correlati