2011-09-22 90 views
0

我無法收回我從SPARK客戶端傳輸的文件。 我正在使用ASMACK jar庫,因此無法進入庫。XMPP SMACK文件接收不能在Android上工作

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

// new ServiceDiscoveryManager(connection); 
    FileTransferNegotiator.setServiceEnabled(connection, false); 
    FileTransferManager manager = new FileTransferManager(connection); 
    manager.addFileTransferListener(new FileTransferListener() { 
     public void fileTransferRequest(FileTransferRequest request) { 
      Log.d("", "allows file..."); 
      if (request != null) { 
       // Accept it 
       IncomingFileTransfer transfer = request.accept(); 
       try { 

        // String pathsd = Environment.getExternalStorageDirectory().toString(); 

        String path = "/sdcard/"+ request.getFileName(); 
        transfer.recieveFile(new File(path)); 

        // transfer.recieveFile(new 
        // File(request.getFileName())); 
        System.out.println("File " + request.getFileName() + "Received Successfully"); 
    //      Log.d("", "rece: " + request.getFileName());      
    //      Log.d("", "path: " + request.getFileName()); 
        // InputStream input = transfer.recieveFile(); 
       } catch (XMPPException ex) { 
        Log.d("", "er: " + ex); 
       } 
       } else { 
       Log.d("", "reject file..."); 
       request.reject(); 
      } 
     } 
    }); 

enter image description here

+0

你能發送文件我得到一個錯誤服務不可用503 – Khan

回答

0

不知道你asmack是基於什麼啪的版本,但在拍擊,這既asmack和星火是基於known issue with file transfer

+0

我使用beem項目amsack庫他們有補丁版本。它工作正常,但文件傳輸不會發生... – Programmer

0

Beems asmack構建過程是well documented並且所有來源都是開放的。

您的代碼看起來正確,但你爲什麼要設置這個

FileTransferNegotiator.setServiceEnabled(connection, false); 

假?

XMPP中的文件傳輸是一個相當複雜的話題。有多種方法(至少4種)可以將文件從一個資源獲取到另一個資源。當你沒有提供進一步的細節,我只能給你如何調試這個通用設備:

Enable connection debug in smack,這將打印出來並記錄進出所有XMPP數據包。跟蹤與文件傳輸相關的XMPP節,並確保它們的行爲與XEP中指定的相同。這可能會提供有關錯誤發生的提示。