Android基于XMPP的即时通讯2-文件传输
本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输
1、初始化文件传输管理类
public static FileTransferManager getFileTransferManager() {
if (fileManager == null) {
ServiceDiscoveryManager sdManager = ServiceDiscoveryManager
.getInstanceFor(connection);
if (sdManager == null) {
sdManager = new ServiceDiscoveryManager(connection);
}
sdManager.addFeature("http://jabber.org/protocol/disco#info");
sdManager.addFeature("jabber:iq:privacy");
FileTransferNegotiator.setServiceEnabled(connection, true);
fileManager = new FileTransferManager(connection);
}
return fileManager;
}
2、监听接收文件(文件路径创建好,不然会报错),直接接收文件,没有写确认
private void addFileListerer() {
FileTransferManager manager = XmppConnection.getFileTransferManager();
manager.addFileTransferListener(new FileTransferListener() {
@Override
public void fileTransferRequest(final FileTransferRequest request) {
new Thread() {
@Override
public void run() {
IncomingFileTransfer transfer = request.accept();
String fileName = transfer.getFileName();
// 在handler里取出来显示消息
String[] args = new String[] { toUserName, fileName };
android.os.Message msg = handler.obtainMessage();
msg.what = 1;
msg.obj = args;
msg.sendToTarget();
String save_path = Environment
.getExternalStorageDirectory()
+ File.separator
+ "XmppTest"
+ File.separator
+ fileName;
File file = new File(save_path);
try {
transfer.recieveFile(file);
while (!transfer.isDone()) {
if (transfer.getStatus().equals(FileTransfer.Status.error)) {
System.out.println("ERROR!!! " + transfer.getError());
} else {
}
try {
Thread.sleep(1000L);
} catch (Exception e) {
}
}
} catch (XMPPException e) {
e.printStackTrace();
}
};
}.start();
}
});
}
3、发送文件,这里发送图片测试
客户端文件发送:toId后边要加一个字符串"/Smack",发送给其他的平台要加相应的字符串;
这里手机客户端发送给Spark客户端,发送文件时toId+"/Spark"

private void getImage(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, TUPIAN_RESULT);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = activity.managedQuery(uri, proj, null, null, null);
int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String img_path = cursor.getString(index);
new SendFileTask().execute(img_path, toUserID);
};
class SendFileTask extends AsyncTask<String, Integer, Integer> {
protected Integer doInBackground(String... params) {
if (params.length < 2) {
return Integer.valueOf(-1);
}
String img_path = params[0];
String toId = params[1] + "/Spark";
FileTransferManager fileTransferManager = XmppConnection.getFileTransferManager();
File filetosend = new File(img_path);
if (filetosend.exists() == false) {
return -1;
}
// 在handler里取出来显示消息
String[] args = new String[] { toUserName, img_path };
android.os.Message msg = handler.obtainMessage();
msg.what = 1;
msg.obj = args;
msg.sendToTarget();
OutgoingFileTransfer transfer = fileTransferManager
.createOutgoingFileTransfer(toId);// 创建一个输出文件传输对象
try {
transfer.sendFile(filetosend, "recv img");
while (!transfer.isDone()) {
if (transfer.getStatus().equals(FileTransfer.Status.error)) {
System.out.println("ERROR!!! " + transfer.getError());
} else {
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (XMPPException e1) {
e1.printStackTrace();
}
return 0;
}
}

源码送上:http://files.cnblogs.com/files/pear-lemon/XmppTest.zip
Android基于XMPP的即时通讯2-文件传输的更多相关文章
- Android基于XMPP的即时通讯3-表情发送
这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs ...
- Android基于xmpp的即时通讯应用
xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版, ...
- Android基于XMPP的即时通讯1-基本对话
闲暇之余,自己写了个简单的即时通讯,基于OpenFire服务器平台. 整个项目包括两个部分,一个是服务器端,一个是android手机端: 一.关于服务器端没什么好说的,下载安装配置即可 推荐下载带ja ...
- 【XMPP】基于XMPP的即时通讯解决方案
什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...
- iOS基于XMPP实现即时通讯之一、环境的搭建
移动端访问不佳,请访问我的个人博客 使用XMPP已经有一段时间了,但是一直都没深入研究过,只是使用SDK做一些简单的操作,看了许多大神的博客,自己总结一下,准备写一系列关于XMPP的使用博客,以便于自 ...
- Android基于XMPP Smack openfire 开发的聊天室
Android基于XMPP Smack openfire 开发的聊天室(一)[会议服务.聊天室列表.加入] http://blog.csdn.net/lnb333666/article/details ...
- ZT android -- 蓝牙 bluetooth (四)OPP文件传输
android -- 蓝牙 bluetooth (四)OPP文件传输 分类: Android的原生应用分析 2013-06-22 21:51 2599人阅读 评论(19) 收藏 举报 4.2源码AND ...
- android环境下的即时通讯
首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...
- 基于openfire+smack即时通讯instant message开发
前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...
随机推荐
- memcached的最佳实践方案
基本问题 1.memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 ...
- MongoDB3.0新特性
3月3日,MongoDB3.0终于发布了. 主要特点包括了对之前收购的WiredTiger存储引擎的支持,插件式存储引擎API,SCRAM-SHA-1认证机制,并改进了解释功能.此外,包含了自动化.备 ...
- loj 1099(最短路)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25956 思路:dist[v][0]代表走到点v的最短路,dist[ ...
- 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB
稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚至99%以上.因此我们需要有高效的稀疏矩阵存储格式.本文总结几种典型的格式:COO,CSR ...
- html css js 一些记录.
webstorm 的基本使用 webstorm 格式化 html 代码: Ctrl+Alt+L js html css 基本使用 注意 dom 的 innerHTML会刷新dom,所以里面包含的事件绑 ...
- 【设计模式】MVC模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...
- Struts2文件上传下载
Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...
- HDU 4496 D-City (并查集)
题意:有n个城市,m条路,首先m条路都连上,接着输出m行,第i行代表删除前i行的得到的连通块个数 题解:正难则反,我们反向考虑使用并查集添边.首先每个点都没有相连,接着倒着来边添加边计算,当两个点父节 ...
- 廖雪峰js教程笔记7 基本类型和包装类型
在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // ' ...
- DSP using MATLAB 示例Example2.3
n = [-10:1:10]; alpha = -0.1+0.3j; % x = exp(alpha*n); % subplot(2,1,1); set(gcf,'Color',[1,1,1]) % ...