android xmpp文件传输,XMPP通讯开发-好友文件传输

在XMPP通讯开发-好友通信实现 中我们实现了好友间的信息通信,在这里我们实现好友间文件的传输,这部分内容可以查看smack_3_3_0\documentation\extensions\index.html,文件传输我们主要用到的是FileTransferManager和OutgoingFileTransfer,当然我们可以发送文件也可以接收文件,要实现接收文件我们需要FileTransferManager添加一个监听事件FileTransferListener,来监听好友发送的文件事件,首先我们实现如何发送文件,代码如下:

private void sendFile(File file, String fileName){

try {

if(JUID == null)

JUID = conn.getRoster().getEntry(frindsXmppAddress).getUser();

transfer = fileManager.createOutgoingFileTransfer(frindsXmppAddress+"/Spark 2.6.3");

transfer.sendFile(file, fileName);

while(!transfer.isDone()){

if(transfer.getStatus().equals(Status.error)){

System.out.println("ERROR!!! " + transfer.getError());

}else{

System.out.println(transfer.getStatus()+"进度 "+transfer.getProgress());

}

Thread.sleep(1000);

}

} catch (Exception ex) {

ex.printStackTrace();

}finally{

if(transfer.getStatus().equals(Status.error)){

ChatMessage.append(dateUtils.getHM()+" 自己: 传输出错"+"\n");

}else if(transfer.getStatus().equals(Status.complete)){

ChatMessage.append(dateUtils.getHM()+" 自己: "+fileName+" 传输完成\n");

}else if(transfer.getStatus().equals(Status.cancelled)){

ChatMessage.append(dateUtils.getHM()+frindsXmppAddress+" "+fileName+" 传输取消\n");

}

}

}

这里要注意的就是

transfer = fileManager.createOutgoingFileTransfer(frindsXmppAddress+"/Spark 2.6.3");

函数的原型public OutgoingFileTransfer createOutgoingFileTransfer(String userID),其中的userID包含三部分,. A fully-qualified jabber ID consists of a node, a domain, and a resource, the user must be connected to the resource in order to be able to recieve the file transfer。其实也可以说两部分就是xmpp地址+对方客户端,一定要包含这几个,不然会报错的,效果图如下:

b024277b0eb124e1990de1904350263b.png

b68e576c1872acd26b0cddbb14eba0ee.png

这个是发送文件,接收文件如何进行呢,代码如下:

private void initTransFile(){

fileManager = new FileTransferManager(conn);

fileManager.addFileTransferListener(new FileTransferListener(){

@Override

public void fileTransferRequest(FileTransferRequest request) {

int respone = JOptionPane.showConfirmDialog(null, frindsXmppAddress+"发送文件"+request.getFileName(), "发送文件", JOptionPane.YES_NO_OPTION);

if(respone == 0){

try {

// Accept it

IncomingFileTransfer transfer = request.accept();

transfer.recieveFile(new File(request.getFileName()));

} catch (XMPPException ex) {

Logger.getLogger(ChatPanel.class.getName()).log(Level.SEVERE, null, ex);

}

}else{

request.reject();

}

}

});

}

我们注册FileTransferListener进行监听,效果图如下:

ee28f85868c0fcf215f1475598584825.png

源码项目:https://github.com/jwzhangjie/IChat_PC.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值