年前研究了一下Android如何?無線互傳的功能,寫了個小demo,最近無事,遂整理一下,與各位共用。前期調研發現,Android想要實現無線互傳有以下幾種技術:1,Bluetooth通行已久,簡單易用,無奈速度奇慢是硬傷;2,NFC,官方從API 9開始支援,但各廠商對此技術持觀望態度,比如我的三星就沒有相應NFC硬體,NFC適用近場少量資料轉送,尚未測試資料量的表現,不過NFC所謂的近場對距離要求相當苛刻,基本是要貼著才能傳;3,WIFI-P2P,傳輸速度快,且P2P使得兩台裝置互為C/S,傳輸可雙向進行,官方從API 14開始支援,考慮到目前API 14以下的裝置保養量巨大,只能暫時放棄此技術。
權衡一下,參考目前各類無線快傳軟體,最終確定使用Wifi AP方式,自測相容API 8裝置,傳輸速度快,但只能單向傳輸。Client端通過Wifi串連到Server端開啟的Wifi AP,串連成功後Client通過HttpEngine向Server發起Http請求,Server通過一個簡易的HttpServer向Client提供響應服務,下面用一個非標準的流程圖來大致示意一下方案流程:
在上傳工程之前,對原始碼中幾個重要的類簡單解釋一下:
Client端
WifiApClientManager:對WifiManager的介面進行了封裝,以便於進行開啟、串連等操作
HttpEngineLite:發起Http請求的"引擎"類
WifiApClientRequest:請求抽象類別,子類WifiApClientGetRecvListRequest,WifiApClientGetFileRequest分別表示擷取擷取Server端待傳檔案清單請求及擷取Server端指定檔案請求,使用HttpEngineLite執行具體操作
NanoHTTPClient:提供擷取Server端待傳檔案清單,擷取Server端指定檔案等操作介面,使用線程池管理WifiApClientRequest
Server端
WifiApServerManager:對WifiManager的介面進行了封裝,以便於進行開啟AP,配置AP等操作
WifiApServerUtil:定義了Android AP通用網關IP
NanoHTTPD:此類為引用的開原始碼(A simple, tiny, nicely embeddable HTTP server in Java)
NanoHTTPServer:NanoHTTPD的子類,實現其介面,返回相應的HttpResponse
Read the fucking source code:
http://files.cnblogs.com/zealotrouge/WifiAPDemo.7z