打造茄子快傳文件Android端傳輸應(yīng)用
如何打造茄子快傳這樣一款 零耗流量的文件傳輸應(yīng)用烛恤?
效果圖
主界面
茄子快傳主界面
文件發(fā)送方
文件發(fā)送方_1
文件發(fā)送方_2
文件發(fā)送方_3
文件接收方
文件接收方_1
文件接收方_2
正如你看到的效果圖那樣母怜,該項(xiàng)目已經(jīng)完結(jié)了,并且完成了以下功能:
1.Android設(shè)備間傳輸文件
2.網(wǎng)頁(yè)傳輸文件
項(xiàng)目地址:https://github.com/mayubao/Kuaichuan
注意:運(yùn)行效果跟茄子快傳幾乎一模一樣缚柏,為了這UI我也是費(fèi)盡了新機(jī)苹熏。
實(shí)現(xiàn)原理
在文件接收方是利用自身的熱點(diǎn)開(kāi)啟,然后創(chuàng)建一個(gè)局域網(wǎng)。在文件發(fā)送方是要去搜索附近的wifi轨域,然后找到這個(gè)熱點(diǎn)袱耽,去連接這個(gè)熱點(diǎn)。所以在局域網(wǎng)內(nèi)傳輸是不需要耗手機(jī)流量的干发。
很早之前做茄子快傳的分析時(shí)朱巨,文件傳輸?shù)脑捒梢酝ㄟ^(guò)藍(lán)牙,wifi直連枉长,socket這三種方式冀续。藍(lán)牙和wifi直連要做配對(duì),比較麻煩必峰。為了省去中間配對(duì)環(huán)節(jié)沥阳,這里我采用用socket來(lái)實(shí)現(xiàn)文件的傳送。通過(guò)Socket來(lái)實(shí)現(xiàn)文件傳輸?shù)暮锰? 無(wú)論是什么設(shè)備都可以通過(guò)socket實(shí)現(xiàn)自点。下面是手機(jī)wifi 各個(gè)協(xié)議傳輸速度的差別:
![wifi各個(gè)協(xié)議](https://gss0.baidu.com/-fo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh=600,800/sign=55eb4daf45a98226b8942321bab29539/c8177f3e6709c93dcee0c12d993df8dcd00054de.jpg)
百科鏈接
上面就是茄子快傳App實(shí)現(xiàn)兩部設(shè)備之間文件傳送的基本原理
流程圖
文件傳送操作:文件傳送是發(fā)生在兩端的桐罕,分別是文件發(fā)送端和文件接收端,就正如你看到茄子快傳的主頁(yè)那樣桂敛,主界面有兩個(gè)按鈕功炮。分別是我要發(fā)送,我要接收术唬。
對(duì)應(yīng)關(guān)系:
我要發(fā)送------>>>文件發(fā)送方
我要接收------>>>文件接收方
上面的流程圖就是大致是文件發(fā)送方和文件接收方在同一個(gè)局域網(wǎng)通信的流程
分析
如果你繼續(xù)再觀察茄子快傳傳送文件的過(guò)程中薪伏,你會(huì)發(fā)現(xiàn)茄子快傳不僅僅是利用socket在簡(jiǎn)單傳輸文件,你會(huì)發(fā)現(xiàn)文件發(fā)送方和文件接收方正在文件傳送的過(guò)程中都是顯示了同樣的文件傳輸列表粗仓。
注意:每一個(gè)文件傳輸條目都包含了文件大小嫁怀,文件名稱,文件的縮略圖借浊,文件傳輸?shù)倪M(jìn)度塘淑。而且還包括所有文件的大小進(jìn)度和耗時(shí)。
實(shí)現(xiàn)過(guò)程
為了實(shí)現(xiàn)茄子快傳文件接收方和文件發(fā)送方的效果蚂斤。這里我才去了自定義協(xié)議來(lái)實(shí)現(xiàn)存捺。
自定義協(xié)議:header + body
header 包括 文件的信息(文件路徑,文件的大小曙蒸,文件的名稱)[102410 byte] + 文件的縮略圖[1024 40 byte]
body 包括 實(shí)際的文件header 文件的信息是以json字符串 而文件的縮略圖是直接以byte數(shù)據(jù)寫(xiě)過(guò)去
文件傳輸關(guān)鍵核心的幾個(gè)類(lèi)詳情查看:
Transferable.java
BaseTransfer.java
FileSender.java
FileReceiver.java
這四個(gè)文件
項(xiàng)目地址
這是我在github上面的項(xiàng)目鏈接:猛戳 https://github.com/mayubao/Kuaichuan
喜歡的給個(gè)star捌治,有幫助的fork一下,在這里感謝您讀了這一篇文章E摺Pび汀! _
注意:在AdroidStudio 可以直接checkout下來(lái)臂港。請(qǐng)確保你的git地址是正確的森枪。
測(cè)試
測(cè)試的話是需要兩部真機(jī)來(lái)測(cè)試的视搏。在Android測(cè)試機(jī) 分別是 魅藍(lán)2 與 華為 SCL-TL00, Vivo xs1 運(yùn)行正常
版本
v1.0
實(shí)現(xiàn)了Android設(shè)備間文件傳輸功能
v1.1
實(shí)現(xiàn)了網(wǎng)頁(yè)傳輸文件功能