Android仿茄子快传-实现面对面快传功能
来源:互联网 发布:金数据软件下载 编辑:程序博客网 时间:2024/04/27 15:51
茄子快传是一款文件传输应用,相信大家都很熟悉这款应用,应该很多人用过用来文件的传输。
它有两个核心的功能:
端到端的文件传输
Web端的文件传输
这两个核心的功能我们具体来分析一下!
端到端的文件传输
所谓的端到端的文件传输是指应用端发送到应用端(这里的应用端指Android应用端),
这种文件传输方式是文件发送端和文件接收端必须安装应用。效果图
文件发送方
文件接收方
简单的文件传输的话,我们可以用蓝牙,wifi直连,ftp这几种方式来进行文件的传输。但是:
蓝牙传输的话,速度太慢,而且要配对。相对比较麻烦。
wifi直连差不多跟蓝牙一样,但是速率很快,也要配对。
ftp可以实现文件的批量传输,但是没有文件的缩略图。
最初分析这个项目的时候就想着通过自定义协议的Socket的通信来实现,自定义的协议包括
header + body的自定义协议, header部分包括了文件的信息(长度,大小,文件路径,
缩略图), body部分就是文件。现在实现这一功能。(后序:后面开发《网页传》功能的时候,
可以考虑这两个核心的功能都能用在Android架设微型Http服务器来实现。这是后话了。)
- 端到端流程图
- 编码实现
两部设备文件传输是需要在一个局域网的条件下的,只有文件发送方连接上文件接收方的热点(搭建了一个局域网),
这样文件发送方和文件接收方就在一个局域网里面,我们才可以进行Socket通信。这是一个大前提!
初始化条件 – Ap(热点)和Wifi的管理, 文件的扫描
对Android的Ap(热点)和Wifi的一些操作都封装在下面两个类:
1.https://github.com/mayubao/KuaiChuan/blob/master/app/src/main/java/io/github/mayubao/kuaichuan/core/utils/WifiMgr.java
2.https://github.com/mayubao/KuaiChuan/blob/master/app/src/main/java/io/github/mayubao/kuaichuan/core/utils/ApMgr.java
关于热点和Wifi的操作都是根据WifiManager来操作的。
所以要像操作WifiManeger是必须要一些权限的。必须在AndroidManifest.xml清单文件里面声明权限:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
文件接收端打开热点并且配置热点的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
对于类WifiAPBroadcastReceiver是热点的一个广播类,最后一行代码是配置指定名称的热点,
这里是以设备名称作为热点的名称。
文件发送端发送文件,文件发送端首先要选择要发送的文件,然后将要选择的文件存储起来,
这里我是用了一个HashMap将发送的文件存储起来,key是文件的路径,value是FileInfo对象。
以下是扫描手机存储盘上面的文件列表的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
注意**:这里扫描的FileInfo对象只是扫描了文件路径filePath, 还有文件的大小size。FileInfo的其他属性到文件传输的时候再二次获取,获取FileInfo的其他属性都在FileUtils这个工具类里面了。
文件发送端打开wifi扫描热点并且连接热点的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
对于ListUtils.filterWithNoPassword是将扫描的结果进行过滤,过滤掉有密码的扫描结果。lv_result.setOnItemClickListener回调的方法是连接指定的热点来形成一个局域网。文件传输的大前提条件就已经形成了。到这里文件发送端和文件接收端的初始化环境也就搭建起来了。
文件传输模块
文件传输模块的核心代码就只有4个类,Transferable, BaseTransfer, FileSender, FileReceiver。
Transferable是接口。
BaseTransfer, FileSender, FileReceiver是类。
对于文件发送端,每一个文件发送对应一个FileSender,而对于文件接收端,
每一个文件的接收对应一个FileReceiver。
而FileSender,FileReceiver是继承自 抽象类BaseTransfer的。 BaseTransfer是实现了Transferable接口。
下面是4个类图的关系:
在Transferable接口中定义了4个方法,分别是初始化,解析头部,解析主体,结束。解析头部和解析主体分别对应上面说的自定义协议的header和body。初始化是为每一次文件传输做初始化工作,而结束是为每一次文件传输做结束工作,比如关闭一些资源流,Socket等等。而BaseTransfer就只是实现了Transferable, 里面封装了一些常量。没有实现具体的方法,具体的实现是FileSender,FileReceiver。
代码详情:
1.https://github.com/mayubao/KuaiChuan/blob/master/app/src/main/java/io/github/mayubao/kuaichuan/core/Transferable.java
2.https://github.com/mayubao/KuaiChuan/blob/master/app/src/main/java/io/github/mayubao/kuaichuan/core/BaseTransfer.java
3.https://github.com/mayubao/KuaiChuan/blob/master/app/src/main/java/io/github/mayubao/kuaichuan/core/FileSender.java
4.https://github.com/mayubao/KuaiChuan/blob/master/app/src/main/java/io/github/mayubao/kuaichuan/core/FileReceiver.java
总结
端到端的文件传输就分析到这里,主要是Ap热点的操作,Wifi的操作,Socket通信来实现文件的传输。
但是这里的Socket用到的不是异步IO,是同步IO。所以会引起阻塞。
比如在FileSender中的暂停文件传输pause方法调用之后,会引起FileReceiver中文件传输的阻塞。
如果你对异步IO有兴趣,你也可以去实现一下。
对于端对端的核心代码都是在 io.github.mayubao.kuaichuan.core 包下面。
这是我在github上面的项目链接
https://github.com/mayubao/KuaiChuan
原网址:http://blog.csdn.net/yubaoma2014
- Android仿茄子快传-实现面对面快传功能
- Android仿茄子快传-实现面对面快传功能
- Android如何实现茄子快传
- 仿茄子快传应用源码下载
- 仿茄子快传的一款文件传输应用
- 茄子快传使用测评
- 关于UPnP协议在快传功能实现需求的解读
- 安卓手机wifi面对面快传的实现
- 仿茄子快传——获取安装应用列表信息
- 茄子快传和腾讯全民Wifi配合使用
- 如何打造 茄子快传 这样一款文件传输应用
- Android手机间无线互传功能探索及实现
- 茄子 快牙 什么闪传 的零流量分享原理解析
- 从”茄子快传”看应用程序如何获取手机已安装程序的apk文件
- j2me实现手机即拍即传功能
- 快
- 在WEB自定义控件中实现自动回传功能
- ASP.NET 一个按钮实现浏览跟上传功能
- java.lang.IllegalArgumentException: Maximum number of fonts was exceeded解决
- 一、Sketchup用ruby进行二次开发--简述
- T
- Mysql的max_allowed_packet问题
- SparkSQL之排序,保存数据
- Android仿茄子快传-实现面对面快传功能
- 速8与无人驾驶
- pthreads
- 那些年我们一起追的前端
- 【C】函数的调用过程,栈帧的创建和销毁
- jdbc面试题
- js调用html页面
- C++之substr与substring浅谈
- android开源项目二、