我无法收到我从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();
}
}
});
答案 0 :(得分:0)
不知道你的asmack基于什么版本的Smack,但Smack中有一个known issue with file transfer,asmack和Spark都是基于。{/ p>
答案 1 :(得分:0)
Beems asmack构建过程为well documented,并且所有人都可以使用这些来源。
您的代码看起来正确,但为什么要设置此
FileTransferNegotiator.setServiceEnabled(connection, false);
为假?
XMPP中的文件传输是一个相当复杂的主题。有多种方法(至少4种)可以将文件从一个资源获取到另一个资源。由于您没有提供更多详细信息,我只能为您提供有关如何调试此内容的常规设备:
Enable connection debug in smack,打印并记录所有进出的XMPP数据包。跟踪与文件传输相关的XMPP节,并确保它们的行为与XEPs。这可能提供了关于什么是错误的提示。