需求背景
在我開(kāi)發(fā)過(guò)的android應(yīng)用中硫惕,大多都需要和 遠(yuǎn)程服務(wù)端 進(jìn)行交互叁巨,需要從服務(wù)端獲得數(shù)據(jù)或者上傳數(shù)據(jù)财岔。
那樣我們的app(android 應(yīng)用程序避诽,以下簡(jiǎn)寫)直接訪問(wèn)互聯(lián)網(wǎng)上的服務(wù)器龟虎。
當(dāng)然有wifi的時(shí)候,我們就連接wifi路由沙庐,再接入服務(wù)端鲤妥。圖示如下:
情景
情景1:
android設(shè)備 <---> 位于互聯(lián)網(wǎng)的服務(wù)器
情景2:
android設(shè)備 <---> WIFI路由(可能是家用的小路由等) <---> 位于互聯(lián)網(wǎng)的服務(wù)器
上面的情景基本滿足我們的需要了。然后拱雏,我們不得不考慮到一些問(wèn)題:
PC(個(gè)人電腦)仍然是我們進(jìn)入互聯(lián)網(wǎng)的主要入口棉安。
android 設(shè)備畢竟沒(méi)有pc上操作更方便
于是我們考慮到另外的情景
情景3:
android設(shè)備 <---> PC(個(gè)人電腦) <---> 位于互聯(lián)網(wǎng)的服務(wù)器
這個(gè)情景里,我們的android應(yīng)用程序(android app)首先和pc上的桌面應(yīng)用程序(desktop app)進(jìn)行交互铸抑,桌面應(yīng)用程序和互聯(lián)網(wǎng)應(yīng)用程序(web app)交互贡耽。
比如我們要下載 “某個(gè)應(yīng)用安裝到手機(jī)上”,我們可以再 電腦上的應(yīng)用程序上操作鹊汛,搜索我們想要的程序蒲赂,點(diǎn)擊下載(從遠(yuǎn)程下載到本地pc),
然后安裝(從pc安裝應(yīng)用到android 手機(jī))。
我們常見(jiàn)到的“豌豆莢”刁憋,“騰訊手機(jī)助手”等都是這樣的使用方式滥嘴。
本文主要討論 情景3
實(shí)現(xiàn)
如果要實(shí)現(xiàn)情景3.我們需要開(kāi)發(fā):
1.一個(gè)桌面應(yīng)用程序,desktop app。
用于:從互聯(lián)網(wǎng)提取數(shù)據(jù)职祷,并將數(shù)據(jù)傳輸?shù)絘ndroid 手機(jī)內(nèi)氏涩。
2.一個(gè)運(yùn)行在android設(shè)備的 android app
用于:接收來(lái)自desktop app的數(shù)據(jù)届囚。
接受來(lái)自desktop app的指令有梆,執(zhí)行相關(guān)操作是尖,返回消息到pc。
2.1桌面應(yīng)用程序的實(shí)現(xiàn)
要做桌面應(yīng)用泥耀,當(dāng)然還是用winform(.net方向)來(lái)實(shí)現(xiàn)了饺汹。
想建立pc和手機(jī)之間的同步,我們需要依托adb來(lái)實(shí)現(xiàn)痰催。我們看看adb是什么兜辞?
Android Debug Bridge
概述
adb的全稱為Android Debug Bridge,就是起到調(diào)試橋的作用夸溶。通過(guò)adb我們可以在Eclipse中方便通過(guò)DDMS來(lái)調(diào)試Android程序逸吵,說(shuō)白了就是debug工具。adb的工作方式比較特殊缝裁,采用監(jiān)聽(tīng)Socket TCP 5554等端口的方式讓IDE和Qemu通訊扫皱,默認(rèn)情況下adb會(huì)daemon相關(guān)的網(wǎng)絡(luò)端口,所以當(dāng)我們運(yùn)行Eclipse時(shí)adb進(jìn)程就會(huì)自動(dòng)運(yùn)行捷绑。
adb是android sdk里的一個(gè)工具, 用這個(gè)工具可以直接操作管理android模擬器或者真實(shí)的andriod設(shè)備(如G1手機(jī)). 它的主要功能有:
* 運(yùn)行設(shè)備的shell(命令行)
* 管理模擬器或設(shè)備的端口映射
* 計(jì)算機(jī)和設(shè)備之間上傳/下載文件
* 將本地apk軟件安裝至模擬器或android設(shè)備
要使用adb韩脑,我們可以在我們的sdk目錄下找到它。
位于 android-sdk\platform-tools 下的幾個(gè)文件
adb.exe
AdbWinApi.dll
AdbWinUsbApi.dll
我們需要這3個(gè)文件粹污《味啵拷貝到我們的winrom工程下。
調(diào)用
在.net winfrom中壮吩,我們需要 調(diào)用adb.exe來(lái)完整一系列的操作进苍。
我們一般使用process類來(lái)啟動(dòng)新的進(jìn)程。如下:
1.列出當(dāng)前所有連接到pc的android 設(shè)備鸭叙。(以得到一個(gè)設(shè)備ID)
2.安裝某個(gè)apk(android 應(yīng)用程序包)到手機(jī)觉啊。
3.發(fā)送廣播以啟動(dòng)手機(jī)內(nèi)的某個(gè)服務(wù)。
4.在pc上映射端口递雀。該端口將某個(gè)android的端口柄延,應(yīng)該到pc的端口,然后我們就可以使用這個(gè)端口和設(shè)備進(jìn)行通訊了缀程。
我封裝了一個(gè)process執(zhí)行adb.exe的類搜吧,參考我的博客:
http://www.cnblogs.com/vir56k/archive/2012/12/03/2799810.html
2.1 Android應(yīng)用的實(shí)現(xiàn)
我們需要開(kāi)一個(gè) 守護(hù)程序,來(lái)監(jiān)聽(tīng)來(lái)自pc的指令杨凑,以執(zhí)行相關(guān)操作的相應(yīng)滤奈。我們需要:
1.編寫一個(gè)廣播接收器,以收到某個(gè) 廣播消息時(shí)撩满,啟動(dòng) 監(jiān)聽(tīng)服務(wù)蜒程。
2.編寫一個(gè)監(jiān)聽(tīng)服務(wù)绅你。在服務(wù)里啟動(dòng)監(jiān)聽(tīng)服務(wù),我們需要監(jiān)聽(tīng)來(lái)自某個(gè)端口的消息昭躺,這個(gè)端口是手機(jī)和pc之間的同路忌锯。由于android 設(shè)備的特點(diǎn),我們需要用java nio來(lái)實(shí)現(xiàn)監(jiān)聽(tīng)领炫,以提高性能偶垮。
3.實(shí)現(xiàn)監(jiān)聽(tīng)服務(wù)里的消息響應(yīng),根據(jù)具體的業(yè)務(wù)需要帝洪,完成和pc之間的消息響應(yīng)似舵。