Android通过两种模式,来支持各种USB外围设备和Android USB附件(硬件实现了Android的附件协议):USB附件模式和USB主机模式。在USB附件模式下,外部 USB 硬件充当USB主机。(作为)附件的例子,包括机器人控制器、扩展插座(docking stations)、诊断和音乐设备、电子报亭(kiosks)、读卡器等其他设备。这种模式给予不具备主机功能的Android设备,与USB硬件通信的能力。Android USB附件,必须被设计为与装有Android的设备一起工作,并且必须遵循Android附件通讯协议。在USB主机模式下,装有Android的设备扮演着主机的角色。(外围)设备的例子,包括数码像机,键盘,鼠标和游戏控制器。那些适应面很广的USB设备,仍可以与Android应用交互,前提是这些Android应用可以正确的与这些设备通讯。

图1展示了两种模式的异同。当Android设备处于主机模式时,它扮演USB主机角色并为总线供电。当Android设备处于附件模式时,被连接的USB硬件(在这种情况下是一个Android USB附件)扮演主机角色并给总线供电。

android UsbDevice 拷贝数据 安卓usb文件传输模式_Android

图1. USB主从模式

USB附件和主机模式,在Android 3.1(API level 12)或更高的平台中,直接被支持。USB附件模式,可以作为一个扩展库,后装到Android 2.3.4 (API level 10),来支持更广泛的设备。设备厂商可以选择是否在设备的系统镜像中包含这个扩展库。


注意:对USB主机和附件模式的支持最终取决于设备的硬件,不管平台的版本(是多少)。你可以通过<uses-feature>元素,过滤出那些支持USB主机和附件的设备。查看USB附件主机文档,可以获取更多详细信息。


调试注意事项

当调试那些使用了USB附件和主机特性的应用时,你可能要把USB硬件,连接到你的Android设备上,这将阻止你通过USB建立与Android设备的adb连接。你仍然可以通过网络连接,来访问adb。通过网络连接使用adb:

  1. 通过USB,将Android设备连接到电脑。
  2. 从SDK 的platform-tools目录下,在命令行中输入adb tcpip 5555。
  3. 输入adb connect <设备的IP地址>:5555,你现在应该已经连接到Android设备了,并能像adb logcat一样执行常用的adb命令。
  4. 要设置你的设备监听USB(即恢复回原来的通过USB来建立adb连接的方式),输入adb usb。