天天看點

關于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主裝置,用來控制其他一些元器件,比如,單片機,滑鼠,遊戲搖桿,數位相機,等等。

<a href="http://blog.51cto.com/attachment/201208/110308286.jpg" target="_blank"></a>

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

<a href="http://blog.51cto.com/attachment/201208/110339694.png" target="_blank"></a>

        先不說是否能實作,另外,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總什麼意思,給點訓示。。。。

本文轉自 風泊海上 51CTO部落格,原文連結:http://blog.51cto.com/fengbohaishang/949723