關於android USB Host編程的一些總結

  以前沒有接觸過android USB Host編程。來到這個公司後,一邊做著測試項目,一邊又得研究著這個組長臨時給的任務。
       他開始說的是,想實現android手機與PC端通過USB 編程方式進行連接,這樣寫一個android程序裝在手機上,插上USB連上電腦,在電腦上就可以管理手機文件瞭。研究瞭兩個多星期,查瞭一些資料,也試瞭不少方法,後來發現似乎走入瞭誤區,就寫一下自己的總結,希望給大傢一些提示:
一、說一下USB HOST的用處:
       USB設備分為HOST(主設備)和SLAVE(從設備),隻有當一臺HOST與一臺SLAVE連接時才能實現數據的傳輸。android支持實現瞭android外設協議的USB硬件。Android外設和主機模式,在android3.1或者更高的平臺上直接支持。但是,對USB主機和外設模式的支持,最終還是要取決於設備的硬件,而不僅僅是看平臺的等級。
我上網搜瞭一下,早期的一些夏新的手機,以及htc的WM手機支持USB HOST功能,而現在的android手機中支持USB HOST的還很非常少,查到的支持USB HOST功能的手機有三星的I9250,HTC手機暫未發現,現在測試使用的HTC T328w不支持USB HOST功能。所以,測試條件不太充分。
       另外,USB HOST的主要用處,一般是android手機做HOST主設備,用來控制其他一些元器件,比如,單片機,鼠標,遊戲手柄,數碼相機,等等。
 

       而很少把手機端當做從設備,與電腦端通過USB HOST進行通信的。另外看到一個人說不能通過USB HOST方式與電腦實現通信:
 

        先不說是否能實現,另外,USB HOST通信方式本來就是用USB連接的,如果用USB連接電腦的話,直接就可以管理手機上的文件瞭,用不到通過程序瞭吧?
二、通過socket方式進行連接
     開始的時候看到一個例子說是通過USB HOST實現的PC與手機端進行連接,我根據查到的資料和自己的理解覺得大概是如下的意思:
      1.基於socket編程方式,在android手機端和pc端進行連接傳輸數據。
      2.連接時,需要通過adb forward方式進行端口轉發,才能連接的上去。
      3.需要用到broadcast來進行,在server端用adb shell 命令開啟android端的socket連接服務。
      4.主要基於android.hardware.usb包下的UsbManager 類和UsbAccessory類。
      5.然後就是一些IO操作,IO處理及關閉優化。
     最關鍵的兩點就是:
     1)端口轉發:
      Runtime.getRuntime().exec(“adb forward tcp :12580 tcp:10086 ”);
      在服務端監聽10086端口。
       2)在server端java程序中使用adb 命令啟動client端的service。
         Runtime.getRuntime().exec(“adb shell am broadcast –a NotifyServiceStart”);
       後來測試多次發現,這個方式沒有用到USB HOST的方式,依然是socket通信,隻不過是進行瞭一下端口轉發。
       另外,關於socket通信時,寫的android程序在模擬器上可以與PC上的server端進行通信,而把程序裝到真機上時,就不能實現通信,這個問題的主要原因是PC端和手機上的無線網絡不在一個網段,無法進行連接。
三、串口通信
       在網上查到一些關於USB HOST的開發都是基於基於android端與一些單片機進行串口通信的,這是一些嵌入式的開發,對端口數據進行轉碼操作,還要用到一些c++的知識,另外還要要用到一些開發板,這些底層的東西不懂,另外這跟android端與pc通信又扯不上關系。
       所以,經過分析,主要矛盾總結如下:
      1.    沒有測試條件(支持USB HOST的手機)大多數手機沒有實現這個功能。
     2.    Android手機與pc端通信使用USB HOST方式,是否有這個必要,明顯直接插上USB就能傳輸文件瞭。
      3.    Android USB HOST編程難度很大,並且主要是android手機作為主設備的。是否有再研究下去的必要。跟測試手機就沒關聯瞭。
    我覺得沒有再研究下去的必要瞭,用瞭不少時間,也走瞭不少彎路,再研究下去也未必能研究出什麼,程序也沒有手機測試。我覺得再研究下去,就是走入誤區瞭,還會占用不少時間,我也不能保證能做出來。不能說什麼收獲都沒有,至少把這些知識都瞭解一些。我準備下面研究上次你提到的Monkey和MonkeyRunner,不知道X總什麼意思,給點指示。。。。
作者:風泊海上

發佈留言