XMPP SMACK 文件接收无法在 android 上运行
Posted
技术标签:
【中文标题】XMPP SMACK 文件接收无法在 android 上运行【英文标题】:XMPP SMACK file receiving not working on android 【发布时间】:2011-09-22 09:18:12 【问题描述】:我无法接收从 SPARK 客户端传输的文件。 我正在使用 ASMACK jar 库,因此无法进入该库。
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();
);
【问题讨论】:
你能发送文件吗我得到一个错误服务不可用 503 【参考方案1】:不知道你的asmack是基于什么版本的Smack,但是Smack中有一个known issue with file transfer,asmack和Spark都是基于这个的。
【讨论】:
我正在使用 beem 项目 amsack 库,他们已经修补了版本。它工作正常,但文件传输没有发生......【参考方案2】:Beems asmack 构建过程是well documented,并且源代码对所有人开放。
你的代码看起来不错,但你为什么要设置这个
FileTransferNegotiator.setServiceEnabled(connection, false);
假的?
XMPP 中的文件传输是一个相当复杂的话题。有多种方法(至少 4 种)可以将文件从一个资源获取到另一个资源。由于您没有提供更多详细信息,因此我只能为您提供有关如何调试此设备的一般设备:
Enable connection debug in smack,它将打印并记录所有进出的 XMPP 数据包。 跟踪与文件传输相关的 XMPP 节,并确保它们的行为符合 XEP 中的规定。这可能会提示您出了什么问题。
【讨论】:
以上是关于XMPP SMACK 文件接收无法在 android 上运行的主要内容,如果未能解决你的问题,请参考以下文章