近有一个小项目,想要在平板电脑上实现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);
基础知识先介绍到,下一步我们再进行代码编写。