打造茄子快传文件Android端传输应用
如何打造茄子快传这样一款 零耗流量的文件传输应用?
效果图
主界面
文件发送方
文件接收方
正如你看到的效果图那样,该项目已经完结了,并且完成了以下功能:
1.Android设备间传输文件
2.网页传输文件
项目地址:https://github.com/mayubao/Kuaichuan
注意:运行效果跟茄子快传几乎一模一样,为了这UI我也是费尽了新机。
实现原理
在文件接收方是利用自身的热点开启,然后创建一个局域网。在文件发送方是要去搜索附近的wifi,然后找到这个热点,去连接这个热点。所以在局域网内传输是不需要耗手机流量的。
很早之前做茄子快传的分析时,文件传输的话可以通过蓝牙,wifi直连,socket这三种方式。蓝牙和wifi直连要做配对,比较麻烦。为了省去中间配对环节,这里我采用用socket来实现文件的传送。通过Socket来实现文件传输的好处: 无论是什么设备都可以通过socket实现。下面是手机wifi 各个协议传输速度的差别:
百科链接
上面就是茄子快传App实现两部设备之间文件传送的基本原理
流程图
文件传送操作:文件传送是发生在两端的,分别是文件发送端和文件接收端,就正如你看到茄子快传的主页那样,主界面有两个按钮。分别是我要发送,我要接收。
对应关系:
我要发送------>>>文件发送方
我要接收------>>>文件接收方
上面的流程图就是大致是文件发送方和文件接收方在同一个局域网通信的流程
分析
如果你继续再观察茄子快传传送文件的过程中,你会发现茄子快传不仅仅是利用socket在简单传输文件,你会发现文件发送方和文件接收方正在文件传送的过程中都是显示了同样的文件传输列表。
注意:每一个文件传输条目都包含了文件大小,文件名称,文件的缩略图,文件传输的进度。而且还包括所有文件的大小进度和耗时。
实现过程
为了实现茄子快传文件接收方和文件发送方的效果。这里我才去了自定义协议来实现。
自定义协议:header + body
header 包括 文件的信息(文件路径,文件的大小,文件的名称)[102410 byte] + 文件的缩略图[1024 40 byte]
body 包括 实际的文件header 文件的信息是以json字符串 而文件的缩略图是直接以byte数据写过去
文件传输关键核心的几个类详情查看:
Transferable.java
BaseTransfer.java
FileSender.java
FileReceiver.java
这四个文件
项目地址
这是我在github上面的项目链接:猛戳 https://github.com/mayubao/Kuaichuan
喜欢的给个star,有帮助的fork一下,在这里感谢您读了这一篇文章!!! _
注意:在AdroidStudio 可以直接checkout下来。请确保你的git地址是正确的。
测试
测试的话是需要两部真机来测试的。在Android测试机 分别是 魅蓝2 与 华为 SCL-TL00, Vivo xs1 运行正常
版本
v1.0
实现了Android设备间文件传输功能
v1.1
实现了网页传输文件功能