usb设备安卓,c#Xamarin

usb设备安卓,c#Xamarin,c#,android,usb,xamarin.android,xamarin,C#,Android,Usb,Xamarin.android,Xamarin,我最近开始在Xamarin上写作,在编写代码查看连接到主机的设备时遇到了一些问题 我已经阅读了SDK文档,所有文档都是用java编写的。我正在尝试将java更改为C#,我将其编码为查找连接的设备: UsbManager manager = (UsbManager)GetSystemService (Context.UsbService); display.Text += " /n inizializzo il manager"; display.Text += "numero dispositi

我最近开始在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管理器”应用程序,我可以看到所有的usb连接,有3个。但使用此代码,它似乎是0 usb连接


我不明白为什么。

听起来您的清单中没有正确的设置。在上查看提供的设置

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

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


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

看起来您已经解决了这个问题,不过我可能还有一些额外的提示。首先,就像你已经发现USB主机只在Android 3.1及更高版本中受支持一样。其次,您需要将“使用功能”添加到android清单中

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

确保包含required=“false”以确保您的应用程序可以在不支持USB主机的设备上安装和启动(如果您的应用程序可选USB主机)

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

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

  • 编辑:没有注意到OP没有指定是要使用usb附件还是usb主机设备。对于配件,请使用Mike Stonis的提示
该死。。我被困在这个问题上。我甚至不能使用Android.Hardware.Usb,因此任何其他与Usb相关的东西。原来我在做一个Android 2.2的项目,那个版本不支持USB主机。在我打开赏金5分钟后解决我的问题:D