2011-09-16 3 views
4

Я работаю над чат-приложением, и мне нужно реализовать передачу файлов с помощью smack api. Я могу подключиться к открытому серверу пожара и также общаться с другим клиентом. Но я не знаю, как реализовать передачу файлов. Я нашел фрагмент кода, но я не отправляю его ableto, используя это также. фрагмент кода я использую:android file transfer using smack

public void SendFile(final String Receiver, final String Directory) { 
     Thread thread = new Thread() { 
      public void run() { 
      ServiceDiscoveryManager sdm = ServiceDiscoveryManager 
      .getInstanceFor(connection); 
      if (sdm == null) 
       sdm = new ServiceDiscoveryManager(connection); 
      sdm.addFeature("http://jabber.org/protocol/disco#info"); 
      sdm.addFeature("jabber:iq:privacy"); 
      // Create the file transfer manager 
      FileTransferManager manager = new FileTransferManager(
        connection); 
      FileTransferNegotiator 
      .setServiceEnabled(connection, true); 

      // Create the outgoing file transfer 
      OutgoingFileTransfer transfer = manager 
      .createOutgoingFileTransfer("[email protected]"); 
      Log.i("transfere file", "outgoingfiletransfere is created"); 
      try { 
       OutgoingFileTransfer.setResponseTimeout(30000); 
       transfer.sendFile(new File(Directory), "Description"); 
       Log.i("transfere file", "sending file"); 
       while (!transfer.isDone()) { 
        try { 
         Thread.sleep(1000); 
         Log.i("transfere file", "sending file status " 
           + transfer.getStatus() + "progress: " 
           + transfer.getProgress()); 
         if (transfer.getStatus() == org.jivesoftware.smackx.filetransfer.FileTransfer.Status.error) { 
          transfer.cancel(); 
          Log.e("","EEEEEERRRRRRRROOORRRRR"); 
          break; 
         } 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         Log.e("aaaaaaaaaaaaaaa","aaaa"+e); 
         e.printStackTrace(); 
        } 
       } 
      } 
      catch (XMPPException e) { 
       // TODO Auto-generated catch block 
       Log.e("aaaaaaaaaaaaaaa","aaaa"+e); 
       e.printStackTrace(); 
      } 
      Log.i("transfere file", "sending file done"); 
     } 
     }; 
     thread.start(); 
    } 

может ли один помочь мне найти решение ..

+0

что-то не так с этим снайпером? – njzk2

+1

когда я выполняю этот метод, я получаю transfer.getStatus() = Status.error –

+0

@ K-ran-Beast, вы решили свою проблему? – juned

ответ

0

Если вы используете версию 3.2.x, есть known problem with file transfer. Попробуйте использовать 3.1, чтобы узнать, исправляет ли он вашу проблему.

0

Теперь у нас есть 4.1.0 с обновленными API.

FileTransferRequest и StreamInitiation упрощают работу.

Пожалуйста, проверьте последнюю версию Smack.

https://www.igniterealtime.org/builds/smack/docs/4.1.0/documentation/extensions/filetransfer.html

+0

flow У меня проблемы с этим API, не могли бы вы мне помочь? [Ссылка] (http://stackoverflow.com/questions/31107005/android-smack-4-1-1-file-transfering-error-could-not-establish-socket) – kobbycoder