最初还是在学校时接触的XMPP, 当时是做的一个简单的基于XMPP协议的聊天工具,功能不是很全,只是实现了收、发消息、表情功能。
最近不是很忙,就补充了一些功能, 这里说一下文件的发送。
public void sendFile(File file){
// 这段代码有些人说必须带,我试了试,在我的工程中发文件是带不带没啥区别
// 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");
FileTransferManager ftManager = new FileTransferManager(connection);
FileTransferNegotiator.setServiceEnabled(connection, true);
String to = connection.getRoster().getPresence("aaa@ServerIp/spark").getFrom();//获得用户状态
// to
= "xxx"+"@"+"xxx"+"/"+"xxx";//一定注意这里必须是完整JID jid = [ node "@" ] domain [ "/" resource ]
// 我是用的android客户端给spark客户端发送文件
OutgoingFileTransfer transfer = ftManager.createOutgoingFileTransfer(to);
try {
transfer.sendFile(file, file.getName());
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(!transfer.isDone()) {
if(transfer.getStatus().equals(FileTransfer.Status.in_progress)){
//可以调用transfer.getProgress();获得传输的进度
Log.i("wht", "传输进度 = "+transfer.getProgress());
}else if(transfer.getStatus().equals(FileTransfer.Status.error)) {
System.out.println("ERROR!!! " + transfer.getError());
} else if (transfer.getStatus().equals(FileTransfer.Status.cancelled)
|| transfer.getStatus().equals(FileTransfer.Status.refused)) {
System.out.println("Cancelled!!! " + transfer.getError());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
本文介绍了一种基于XMPP协议实现文件传输的方法。通过使用FileTransferManager类创建OutgoingFileTransfer实例,能够向指定的JID发送文件,并监控传输进度直至完成。文章提供了具体的实现代码及关键步骤。
258

被折叠的 条评论
为什么被折叠?



