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)实现的即时通信服务器端版本,目前建议使 ...
随机推荐
- [Spring] 事务级别定义
记录下来,以后备用 //事务传播属性 @Transactional(propagation=Propagation.REQUIRED)//如果有事务,那么加入事务,没有的话新创建一个 @Transac ...
- linux命令执行返回值(附错误对照表)
转自:http://blog.sina.com.cn/s/blog_6739945f0100zt4b.html 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结 ...
- Linux下配置OpenCV1.0环境
自己一直嚷嚷着打算学学图像识别,识别个简单的,车牌号,验证码之类的,之前查过资料,OpenCV可以实现.昨天花了一个下午终于配置好环境了,今天写下总结. OpenCV这一名称包含了Open和Compu ...
- 10g ASM下修改control file的位置
1.查看位置以及name是否正确 SQL> sho parameter name NAME TYPE VALUE ------------------------------------ --- ...
- hpunix下11gRac的安装
一.检查环境 1.操作系统版本# uname -a 2.补丁包三大补丁包#swlist -l bundle|grep QPKAPPS#swlist -l bundle|grep QPKBASE#swl ...
- 获取内核当前执行模块和当前发生异常地址和线程异常Handler调用步骤
循环每个内核模块 统计模块大小 判断触发异常的地址属于那个模块.来确定模块 获取发生异常地址 nt!_EXCEPTION_RECORD +0x000 ExceptionCode : -21391605 ...
- Fragment实现兼容手机和平板
Android手机的设置界面,点击一下Sound,可以跳转到声音设置界面,如下面两张图所示: 然后再来看一下Android Pad的设置界面,主设置页面和声音设置页面都是在一个 ...
- Chrome浏览器之 Postman 安装
Postman 是一款发送 HTTP 请求的 Chrome 插件.开发后端程序的同学可以用它来测试自己写的应用程序是否能够正常访问. 现在由于国内的网络限制, Chrome 浏览器里无法访问“扩展程序 ...
- MVC3实现多个按钮提交
有时我们需要在同一个Form表单中进行多个按钮的提交,来完成不同的功能.因为MVC中一个表单默认只能提交到一个Action处理,相对比较麻烦. 1.使用客户端脚本 我们可以view中加上如下代码: & ...
- ++i与i++的区别
1. ++i 和 i++,在单独使用时,就是 i=i+1. 2. a = ++i,相当于 i=i+1; a = i; (先i = i + 1,再使用i的值).也可以写成 i++; a=i 3. a = ...