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