【问题标题】:How to receive files in Smack in Android?如何在 Android 的 Smack 中接收文件?
【发布时间】:2013-05-11 08:13:22
【问题描述】:

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

发送文件时出现以下错误。

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>

【问题讨论】:

  • 您使用的是哪个版本的 smack? 3.2 中的文件传输存在一个已知问题
  • 总是发布您遇到的错误。发布一段代码说“不起作用”可能不会为您提供任何高质量的答案。查看github.com/Flowdalic/asmack/wiki/aSmack-XMPP-File-Transfer 了解有关 aSmack 和 XMPP 文件传输的信息。
  • @pragneshsoni 是你的这个问题解决了,我也面临同样的问题,我什至没有得到 Log.i("Recieve File","new file transfere request new file transfere request new file transfere request" );你能帮忙解决这个问题吗?

标签: android xmpp file-transfer smack asmack


【解决方案1】:

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

【讨论】:

  • 我不知道 Smack 3.2 的任何文件传输错误未在 3.2.1 或 3.2.2 中修复。无需回退到旧版本。
  • @F我已经发布了链接
  • 此“主票证”的所有子任务在 3.2.1 或 3.2.2 中已修复,并且 SMACK-351 已在 3.3 中标记为已解决。同样,无需在旧版本上使用。 3.2.2 或 3.3 可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2013-05-08
  • 2015-09-07
  • 2020-01-26
  • 2015-09-02
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多