15

我最近开始在 Xamarin 上写作,但在编写代码以查看连接到我的主机的设备时遇到了一些问题。

我已经阅读了 SDK 文档,所有文档都是用 java 编写的。我正在尝试将 java 更改为 C#,我对此进行了编码以找到附加的设备:

UsbManager manager = (UsbManager)GetSystemService (Context.UsbService);
display.Text += " /n inizializzo il manager";
display.Text += "numero dispositivi: ";
display.Text += manager.DeviceList.Count;

使用“usb manager”应用程序,我可以看到所有连接的 USB,有 3 个。但是使用此代码,它似乎连接了 0 个 USB。

我不明白为什么。

4

2 回答 2

3

好吧,看起来你已经解决了这个问题,不过我可能会给你一些额外的提示。首先,就像您发现 USB-host 仅在 Android 3.1 及更高版本中受支持。其次,您需要将“uses-feature”添加到 android 清单中。

<uses-feature android:name="android.hardware.usb.host" android:required="false" />

请务必包含 required="false" 以确保您的应用可以在不支持 USB-host 的设备上安装和启动(如果您的应用可选使用 usb-host)。

第三,您会惊讶于有多少现代移动设备还不支持主机模式,第四,USB 端口需要为连接的 USB 设备提供足够的电力。第五点也是最后一点:Android 并不真正适合高速“实时”USB 通信。Android有一个令人讨厌的习惯,即在“解锁”并继续前进之前暂停整个系统并收集垃圾。如果您尝试通过 USB 以恒定速率发送大量数据,这可能会导致缓冲区在 Android 暂停和 GC 时填满,并且在下一次读取缓冲区时您可能会发现损坏的数据。因此,在构建包含 USB 通信的应用程序时,请务必注意您的内存管理!我发现将 Xamarin GC 桥配置为“Tarjan”模式有助于减少 GC 引起的暂停,

也许不太适合回答您的问题,但我觉得很健谈;)。祝你好运!

  • 编辑:没有注意到 OP 没有指定他是想使用 USB 配件还是 USB 主机设备。对于配件,请使用 Mike Stonis 的提示!
于 2014-11-12T10:01:28.340 回答
0

听起来您的清单中没有正确的设置。查看Android USB 附件帮助页面上提供的设置。

至少,您需要将以下行添加到您的 AndroidManifest.xml 文件中。

<uses-feature android:name="android.hardware.usb.accessory" />

提示: AndroidManifest.xml 位于 Xamarin 项目的“属性”部分下。

于 2013-12-11T14:31:45.337 回答