安卓手机与电脑USB读写

8

我有一个在PC上的程序,从USB接收字符串输入(旧程序)。我有一款安卓(4.X)平板需要在USB上向运行在PC上的程序提供字符串输入。当我使用安卓上的示例代码时,以下代码返回空的哈希映射表。PC上已安装了安卓驱动程序(在32位XP和64位Windows 7上均尝试过)。

    mManager = (UsbManager)getSystemService(Context.USB_SERVICE);
    HashMap<String, UsbDevice> devices =  mManager.getDeviceList();

任何一份与 PC 通过 USB 通信的实际工作代码示例都会有所帮助,如果在 Android 上需要任何驱动程序等来与 PC 通信,请指出。我已经尝试过 Accessory 模式和主机模式(以防万一)。
1个回答

10
我不确定我完全明白你在做什么,但如果我理解正确的话——用这种方式是行不通的。 UsbManager.getDeviceList() 专门用于与连接了一些 USB 设备的带有 USB 主机端口的 Android 设备一起使用。但是,就我所知,您将充当设备的 Android 平板电脑连接到充当主机的 PC 上(我猜是这样,因为您写了关于驱动程序安装的内容)。
如果您想在 Android USB 设备和某个 USB 主机之间进行通信(例如,因为您的 Android 设备没有 USB 主机功能),则需要使用附件模式(我建议您从这篇 Android Developers Blog 文章开始)。但是,此模式需要 USB 主机端支持的特殊支持(它必须使用Android 开放配件协议与设备通信)。请注意,getDeviceList() 在附件模式下没有意义——首先,连接的配件是 USB 主机,而不是 USB 设备,在 USB 总线上只能有一个 USB 主机。
如果您想通过附件模式与 PC 进行通信,您可以尝试这个PC 的 AOAP 实现。如果您只需要出于某些调试需要与 Android 设备交流,您可以使用ADB 端口转发和 TCP 连接。

嗨,代码工匠们,谢谢你的回答,你是对的,实际上是UsbManager.getAccessoryList()调用,但它返回Null; - Sawant
嗨@Code Painters,感谢您的回答。我的清单已经设置为附件模式,按照文档操作。您是正确的,它是UsbManager.getAccessoryList()调用,但它也返回Null。我正在使用Android 4.0.3进行开发,因此我使用API级别15的android.hardware.usb.accessory。我正在通过启用usb调试模式的coby kyros上的tcp/ip进行调试,但它仍然无法识别任何配件(即通过usb电缆连接到安卓coby的Windows主机笔记本电脑)。我尝试在关闭usb调试模式的情况下运行应用程序而不使用调试器,但仍然返回null。 - Sawant
为了让Windows笔记本电脑被识别为附件,您需要在其上运行一些附件协议的实现,请参见我的答案中的链接。 - Code Painters
@CodePainters,你能告诉我如何在Android和服务器端实现这个功能吗?可以提供一些代码或者博客链接吗? - Shubham Agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接