近有一個小項目,想要在平板電腦上實現U盤的自動掛載,并且讀取到U盤的內容。所以花了一些時間,研究了Android中的USB Host與HID通訊,網上也有很多資料,挺有參考價值的,所以現在記錄下來,以備后用。首先,我們了解一下USB的一點知識,通用串行總線(英語:Universal Serial Bus,縮寫:USB)是連接計算機系統與外部設備的一種串口總線標準,也是一種輸入輸出接口的技術規范,USB接口因具有標準統一,支持熱插拔,支持即插即用,可連接多個設備等優點,被廣泛地應用于個人電腦和移動設備等信息通訊產品,并擴展至攝影器材、數字電視(機頂盒)、游戲機等其它相關領域。
Android支持各種USB外圍設備,通過兩種模式來支持Android USB外設 (實現了 Android 外設協議的硬件):USB 外設模式和USB主機模式。USB 外設模式,外部 USB 硬件(裝有Android的設備要連接的外部設備)充當 USB 主機。外設的例子包括機器人、擴展插座、診斷和音樂設備、電子報亭、讀卡器等其他設備。這種模式給予不具備主機功能的 Android 設備以與USB硬件交互的能力。Android USB 外設必須設計用來與裝有Android的設備一起工作,并且必須遵循Android 外設通訊協議。USB主機模式,裝有 Android 的設備扮演著主機的角色。這種設備的例子包括數碼像機,鍵盤,鼠標和游戲手柄。那些適應面很廣的USB設備仍可以與Android應用交互,前提是這些Android應用可以正確的與這些設備通訊。
圖1展示了兩種模式的異同。當Android設備處于主機模式時,它扮演USB主機角色并為總線供電。當Android設備處于附件模式時,被連接的USB硬件(在這種情況下是一個Android USB附件)扮演主機角色并給總線供電。
配件模式下,配件必須遵守AOA協議(Android Open Accessory Protocol),它定義了配件如何檢測并與Android設備建立通信等規范的。主機模式和配件模式在Android 3.1(API level 12)及更高的平臺中直接支持。配件模式作為一個附加庫也被Android 2.3.4(API level 10)支持。USB相關操作都集中在android.hardware.usb這個命名空間中。
USB Accessory Mode相關類
1.android.hardware.usb. UsbManager
此類可以獲取USB的狀態信息,并負責和USB配件進行通信。
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
2.android.hardware.usb.UsbAccessory
此類代表了一個USB配件,并且包含了獲取配件特定信息的方法UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
基礎知識先介紹到,下一步我們再進行代碼編寫。