我正在尝试使用 android.developers 上的本指南读取 USB 大容量存储闪存驱动器的内容。我在决定哪个驱动器实际上是闪存驱动器时遇到问题。
我正在使用此代码遍历设备:
protected override void OnResume()
{
usbManager = (UsbManager)this.GetSystemService(Context.UsbService);
monitorUsb();
}
private async void monitorUsb()
{
var deviceList = usbManager.DeviceList;
foreach (var device in deviceList.Values)
{
Debug.WriteLine("USB",device.DeviceName);
Debug.WriteLine("USB",device.DeviceProtocol.ToString());
}
await Task.Delay(30000);
monitorUsb();
}
我插入了两个设备,一个鼠标和一个闪存驱动器。
上面的代码产生以下内容:
[0:] /dev/bus/usb/003/003
[0:] 0
[0:] /dev/bus/usb/003/019
[0:] 0
[0:] /dev/bus/usb/003/020
[0:] 0
通过排除法,
020
是U盘,019
是鼠标。我不知道 003
是什么,也许是内部端口或其他端口之一(我有 adb
通过板载以太网连接)。
USB_CLASS_MASS_STORAGE
的协议是8
和0
涉及USB_CLASS_PER_INTERFACE
如果它们都返回
USB_CLASS_PER_INTERFACE
,我如何在代码中决定哪个设备是闪存驱动器?我查看了 UsbDevice
的其他属性,似乎没有一个返回对我有用的任何东西。
我看错了协议。
foreach (var device in deviceList.Values)
{
for (int i = 0; i < device.InterfaceCount; i++)
{
var deviceInterface = device.GetInterface(i) as UsbInterface;
Debug.WriteLine("USB", deviceInterface.InterfaceProtocol.ToString());
};
//Debug.WriteLine("USB", device.DeviceName);
//Debug.WriteLine("USB", device.DeviceProtocol.ToString());
}
这会将协议返回为
80
,而不是文档建议的8
。我无法解释这个。