使用 smack 进行 android 文件传输

Posted

技术标签:

【中文标题】使用 smack 进行 android 文件传输【英文标题】:android file transfer using smack 【发布时间】:2011-09-16 11:01:08 【问题描述】:

我正在开发聊天应用程序,我必须使用 smack api 实现文件传输。 我能够连接到开火服务器,也可以与另一个客户端聊天。但我不知道如何实现文件传输..我找到了一个代码 sn-p,但我也无法使用它发送它。以下是我正在使用的代码 sn-p:

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("alok@chd-akumar4" );
            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();
    

谁能帮我找到解决办法..

【问题讨论】:

这个片段似乎有什么问题? 当我执行这个方法我得到 transfer.getStatus()=Status.error @K-ran-Beast 你的问题解决了吗? 没有@juned ..仍然无法找到解决方案....... 【参考方案1】:

如果您使用的是 3.2.x 版本,则有一个 known problem with file transfer。尝试使用 3.1 看看它是否能解决您的问题。

【讨论】:

【参考方案2】:

现在我们有了更新 API 的 4.1.0。

FileTransferRequest 和 StreamInitiation 现在让它变得更容易了。

请检查最新的 Smack 版本。

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

【讨论】:

flow 我在使用该 API 时遇到问题,您能帮帮我吗? link

以上是关于使用 smack 进行 android 文件传输的主要内容,如果未能解决你的问题,请参考以下文章

smack api中的连接问题

asmack android,无法传输文件

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

Smack API 问题

XMPP SMACK 文件接收无法在 android 上运行

使用 smack 'XMPPError: service-unavailable - cancel' 传输文件失败