1.背景
在我開發過的android應用中,大多都需要和 遠程服務端 進行交互,需要從服務端獲得數據或者上傳數據。那樣我們的app(android 應用程序,以下簡寫)直接訪問互聯網上的服務器。當然有wifi的時候,我們就介入wifi路由,再接入服務端。圖示如下:
情景1:
android設備 <---> 位於互聯網的服務器
情景2:
android設備 <---> WIFI路由(可能是家用的小路由等) <---> 位於互聯網的服務器
上面的情景基本滿足我們的需要了。然后,我們不得不考慮到一些問題:
- PC(個人電腦)仍然是我們進入互聯網的主要入口。
- android 設備畢竟沒有pc上操作更方便
於是我們考慮到另外的情景
情景3:
android設備 <---> PC(個人電腦) <---> 位於互聯網的服務器
這個情景里,我們的android應用程序(android app)首先和pc上的桌面應用程序(desktop app)進行交互,桌面應用程序和互聯網應用程序(web app)交互。
比如我們要下載 “某個應用安裝到手機上”,我們可以再 電腦上的應用程序上操作,搜索我們想要的程序,點擊下載(從遠程下載到本地pc),然后安裝(從pc安裝應用到android 手機)。我們常見到的“豌豆莢”,“騰訊手機助手”等都是這樣的使用方式。
2.實現
如果要實現情景3.我們需要開發:
1.一個桌面應用程序,desktop app。
用於:從互聯網提取數據,並將數據傳輸到android 手機內。
2.一個運行在android設備的 android app
用於:接收來自desktop app的數據。接受來自desktop app的指令,執行相關操作,返回消息到pc。
2.1桌面應用程序的實現
要做桌面應用,當然還是用winform(.net方向)來實現了。想建立pc和手機之間的同步,我們需要依托adb來實現。我們看看adb是什么?
Android Debug Bridge 概述 adb的全稱為Android Debug Bridge,就是起到調試橋的作用。通過adb我們可以在Eclipse中方便通過DDMS來調試Android程序,說白了就是debug工具。adb的工作方式比較特殊,采用監聽Socket TCP 5554等端口的方式讓IDE和Qemu通訊,默認情況下adb會daemon相關的網絡端口,所以當我們運行Eclipse時adb進程就會自動運行。 adb是android sdk里的一個工具, 用這個工具可以直接操作管理android模擬器或者真實的andriod設備(如G1手機). 它的主要功能有: * 運行設備的shell(命令行) * 管理模擬器或設備的端口映射 * 計算機和設備之間上傳/下載文件 * 將本地apk軟件安裝至模擬器或android設備
要使用adb,我們可以在我們的sdk目錄下找到它。
位於 android-sdk\platform-tools 下的幾個文件
adb.exe
AdbWinApi.dll
AdbWinUsbApi.dll
我們需要這3個文件。拷貝到我們的winrom工程下。
在.net winfrom中,我們需要 調用adb.exe來完整一系列的操作。我們一般使用process類來啟動新的進程。如下:
1.列出當前所有連接到pc的android 設備。(以得到一個設備ID)
2.安裝某個apk(android 應用程序包)到手機。
3.發送廣播以啟動手機內的某個服務。
4.在pc上映射端口。該端口將某個android的端口,應該到pc的端口,然后我們就可以使用這個端口和設備進行通訊了。
我封裝了一個process執行adb.exe的類,參考我的博客:
http://www.cnblogs.com/vir56k/archive/2012/12/03/2799810.html
2.1 Android應用的實現
我們需要開一個 守護程序,來監聽來自pc的指令,以執行相關操作的相應。我們需要:
1.編寫一個廣播接收器,以收到某個 廣播消息時,啟動 監聽服務。
2.編寫一個監聽服務。在服務里啟動監聽服務,我們需要監聽來自某個端口的消息,這個端口是手機和pc之間的同路。由於android 設備的特點,我們需要用java nio來實現監聽,以提高性能。
3.實現監聽服務里的消息響應,根據具體的業務需要,完成和pc之間的消息響應。
-----
不提供源代碼下載。
參考:http://blog.csdn.net/wufenglong/article/details/5778862
http://wenku.baidu.com/view/89bee443be1e650e52ea99c5.html