我最近开始写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附加。
我不明白为什么。
答案 0 :(得分:3)
看起来你已经解决了这个问题,但我可能会为你提供一些额外的提示。首先,您已经发现USB-host仅在Android 3.1及更高版本中受支持。其次,您需要将“使用功能”添加到Android清单。
<uses-feature android:name="android.hardware.usb.host" android:required="false" />
请确保包含required =“false”以确保您的应用可以在不支持USB主机的设备上安装和启动(如果您的应用可选择usb-host)。
第三,你会惊讶地发现有多少现代移动设备不支持主机模式,第四,USB端口需要为连接的usb设备提供足够的电量。第五点也是最后一点:Android并不适合高速“实时”USB通信。 Android有一种讨厌的习惯,即在“解锁”并继续前进之前暂停整个系统并收集垃圾。如果你试图以恒定的速率通过usb发送大量数据,这可能导致缓冲区在Android暂停和GC时填满,并且在下次读取缓冲区时你可能会发现数据损坏。所以在构建包含usb通信的应用程序时一定要注意你的内存管理!我发现将Xamarin GC网桥配置为“Tarjan”模式有助于减少GC引起的暂停,这可能是我的应用程序特有的。
也许不是很适合你的问题的答案,但我感觉很健谈;)。祝你好运!
答案 1 :(得分:0)
听起来你的清单中没有正确的设置。查看Android USB Accessory Help page上提供的设置。
至少,您需要将以下行添加到AndroidManifest.xml文件中。
<uses-feature android:name="android.hardware.usb.accessory" />
提示: AndroidManifest.xml位于Xamarin项目的“属性”部分下。