如何在Android中接收Smack中的文件?

如何在Android中接收Smack中的文件?,android,xmpp,file-transfer,smack,asmack,Android,Xmpp,File Transfer,Smack,Asmack,如何在Android中使用Smack和Openserver接收传输的文件?下面是我用来接收文件的代码。但出现错误,无法记录任何文件 ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection); if(sdm == null) { sdm = new ServiceDiscoveryManager(connection);

如何在Android中使用Smack和Openserver接收传输的文件?下面是我用来接收文件的代码。但出现错误,无法记录任何文件

ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
        if(sdm == null)
        {
            sdm = new ServiceDiscoveryManager(connection);
            sdm.addFeature("http://jabber.org/protocol/disco#info");
            sdm.addFeature("http://jabber.org/protocol/disco#item");
            sdm.addFeature("jabber:iq:privacy");
            XMPPConnection.DEBUG_ENABLED = true;
       }

        FileTransferManager manager=new FileTransferManager(connection);
        FileTransferNegotiator.setServiceEnabled(connection, true);
        manager.addFileTransferListener(new FileTransferListener() 
        {    
          @Override
          public void fileTransferRequest(final FileTransferRequest request) 
          {
             Log.i("Recieve File","new file transfere request  new file transfere request   new file transfere request");
             Log.i("file request","from" + request.getRequestor());
            // TODO Auto-generated method stub
            new Thread()
            {
                   @Override
                   public void run() 
                   {
                     IncomingFileTransfer transfer = request.accept();
                     File mf = Environment.getExternalStorageDirectory();
                     File file = new File(mf.getAbsoluteFile()+"/DCIM/Camera/" + transfer.getFileName());
                     try
                     {
                         System.out.println("<====== Receives ======>");
                         transfer.recieveFile(file);
                         while (!transfer.isDone()|| (transfer.getProgress() < 1)) {
                             Thread.sleep(1000);
                             Log.i("Recieve File alert dialog","still receiving : "+ (transfer.getProgress()) + " status " + transfer.getStatus());
                             if (transfer.getStatus().equals("error")) {
                                  Log.i("Recieve File alert dialog", "cancelling still receiving : "+ (transfer.getProgress())+ " status "+ transfer.getStatus());
                                  transfer.cancel();
                                  break;
                             }
                          }
                    }catch (Exception e){
                           Log.e("", e.getMessage());
                    }          
                  }
            }.start();
          }
        });
ServiceDiscoveryManager sdm=ServiceDiscoveryManager.getInstanceFor(连接);
如果(sdm==null)
{
sdm=新的ServiceDiscoveryManager(连接);
sdm.addFeature(“http://jabber.org/protocol/disco#info");
sdm.addFeature(“http://jabber.org/protocol/disco#item");
sdm.addFeature(“jabber:iq:privacy”);
XMPPConnection.DEBUG_ENABLED=true;
}
FileTransferManager=新的FileTransferManager(连接);
FileTransferCongregator.setServiceEnabled(连接,true);
manager.addFileTransferListener(新的FileTransferListener()
{    
@凌驾
公共作废fileTransferRequest(最终fileTransferRequest请求)
{
Log.i(“接收文件”、“新文件传输请求新文件传输请求新文件传输请求”);
Log.i(“文件请求”,“来自”+request.getRequestor());
//TODO自动生成的方法存根
新线程()
{
@凌驾
公开募捐
{
IncomingFileTransfer=request.accept();
文件mf=Environment.getExternalStorageDirectory();
File File=新文件(mf.getAbsoluteFile()+“/DCIM/Camera/”+transfer.getFileName());
尝试
{
System.out.println(“”);
传输接收文件(文件);
而(!transfer.isDone()| |(transfer.getProgress()<1)){
睡眠(1000);
Log.i(“接收文件警报对话框”,“仍在接收:”+(transfer.getProgress())+“status”+transfer.getStatus());
if(transfer.getStatus().equals(“错误”)){
Log.i(“接收文件警报对话框”,“取消仍然接收:”+(transfer.getProgress())+“status”+transfer.getStatus());
transfer.cancel();
打破
}
}
}捕获(例外e){
Log.e(“,e.getMessage());
}          
}
}.start();
}
});
我在发送文件时遇到以下错误

02:48:58 PM RCV  (1079277904): <iq type="error" id="6gQg0-6" to="admin-pc/cc4dd310" from="2222222222@admin-pc/Smack"><si xmlns="http://jabber.org/protocol/si" id="jsi_3030055238839806007" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="sdcard"><desc>test</desc></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field var="stream-method" type="list-single"><option><value>http://jabber.org/protocol/bytestreams</value></option><option><value>http://jabber.org/protocol/ibb</value></option></field></x></feature></si><error code="405" type="cancel"><not-allowed xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
02:48:58下午RCV(1079277904):testhttp://jabber.org/protocol/bytestreamshttp://jabber.org/protocol/ibb

首先,您需要使用3.1版或3.3版,因为3.2版有一个新版本。然后查看此或获取有关对所述传输进行编码的指导。希望这有帮助。

您使用的是哪种版本的smack?3.2中的文件传输有一个已知的问题,您总是会遇到错误。张贴一段代码说“不行”不可能得到任何高质量的答案。查看有关aSmack和XMPP文件传输的信息。@pragneshsoni是您解决此问题的唯一方法,我面临同样的问题,我甚至没有得到日志。I(“接收文件”、“新文件传输请求新文件传输请求新文件传输请求新文件传输请求”);你能帮我解决这个问题吗?我不知道Smack 3.2的任何文件传输错误没有用3.2.1或3.2.2修复。没有必要退回到旧版本。@FLow我已经发布了此“主票证”的linkAll子任务,其中已用3.2.1或3.2.2修复,SMACK-351已标记为已用3.3解决。同样,没有必要在旧版本上使用。3.2.2或3.3可以正常工作。